【发布时间】:2018-04-16 20:47:18
【问题描述】:
double average = LongStream
.of(-4480186093928204294L, -1340542863544260591L, -6004296286240039273L)
.average()
.getAsDouble()
这会返回2.20723960999901594E18,但我希望它会返回-3.9416750812375014E18。
另一方面,这会返回正确的结果 (-1.4628605853333333E9):
double average = IntStream
.of(-1282256274, -1645263673, -1461061809)
.average()
.getAsDouble()
为什么IntStream.average() 总是返回正确的平均值而LongStream.average() 有时不返回?
【问题讨论】:
-
IntStream行为正常,因为总和被转换为double,因为返回了OptionalDouble。如果不超过Double.MAX_VALUE/Double.MIN_VALUE,您将不会溢出/下溢。 -
@JacobG。在
LongStream中,总和也被转换为double -
虽然没有明确说明。注意
double n = -6004296286240039273L;编译;不需要演员表。 -
@JacobG 我认为你完全没有抓住重点。这与从 int 到 double 的转换(和双精度)无关。这是关于为总和值的累积选择正确的类型。
标签: java java-8 java-stream