gpt4 book ai didi

Scala:尽管在添加时使用了 Long,但仍会溢出

转载 作者:行者123 更新时间:2023-12-04 17:05:40 25 4
gpt4 key购买 nike

在 2.7.5.final 上,我试图像这样添加一个可迭代的 Int 列表

def sum(xs: Iterable[Int]): Long = {
var sum = 0L
xs.foreach((x) => sum = sum + x)
sum
}

println(sum(List(1, Integer.MAX_VALUE - 1)))
println(sum(Integer.MAX_VALUE - 1 to Integer.MAX_VALUE))
println(0L + Integer.MAX_VALUE - 1 + Integer.MAX_VALUE)

当我运行时,我得到
2147483647
0
4294967293

而且,你可能会说“使用reduceLeft(_ + _)”,但它似乎只能返回与列表中元素相同的类型......但我想累积到一个Long,所以我没有溢出问题。

更新 2009-10-28

正如 Eastsun 所指出的,这是 Range 中的一个错误。已在 ticket 2535 中报告给 Scala 团队

最佳答案

这是Range的一个错误。
有Range的foreach方法的源码:

override def foreach(f: Int => Unit) {
if (step > 0) {
var i = this.start
*val until = if (inInterval(end)) end + 1 else end* //bug here!!!

while (i < until) {
f(i)
i += step
}
} else {
var i = this.start
val until = if (inInterval(end)) end - 1 else end

while (i > until) {
f(i)
i += step
}
}

}

关于Scala:尽管在添加时使用了 Long,但仍会溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1635094/

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