gpt4 book ai didi

java - 按绝对大小对(一串) double 排序

转载 作者:IT老高 更新时间:2023-10-28 20:47:08 24 4
gpt4 key购买 nike

我有一系列 double 值,我想将它们相加并得到最大值。DoubleStream.summaryStatistics()听起来很适合。getSum()方法有一个 API 说明,提醒我在我的一门计算机科学类(class)中学到的知识:如果按绝对值对值进行排序,求和问题的稳定性往往会更好。但是,DoubleStream不允许我指定要使用的比较器,它只会使用 Double.compareTo如果我调用 sorted()在直播中。

因此我将这些值收集到 final Stream.Builder<Double> values = Stream.builder();并调用

values.build()
.sorted(Comparator.comparingDouble(Math::abs))
.mapToDouble(a -> a).summaryStatistics();

然而,这看起来有点冗长,我更愿意使用 DoubleStream.Builder而不是通用构建器。我是否遗漏了什么,或者我真的必须使用流的盒装版本才能指定比较器?

最佳答案

原始流没有重载的 sorted 方法,将按自然顺序排序。但回到您的根本问题,有一些方法可以提高总和的准确性,而无需先对数据进行排序。

这样的算法之一是 Kahan summation algorithm恰好被 OpenJDK/Oracle JDK internally 使用.

这无疑是一个实现细节,因此适用通常的警告(非 OpenJDK/Oracle JDK 或 future 的 OpenJDK JDK 可能会采用替代方法等)

另请参阅此帖子:In which order should floats be added to get the most precise result?

关于java - 按绝对大小对(一串) double 排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30299500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com