这里总的新手问题...今天,虽然试图计算一个整数列表(实际上是BitSet)的总和,我遇到了溢出的情况,并注意到返回类型/ product)是Int。范围/列表中是否有任何方法总结或将所有值乘以Long?在scala中减少整数/整数范围
val x = 1 to Integer.MaxValue
println(x.sum) //prints -1453759936
感谢
这里总的新手问题...今天,虽然试图计算一个整数列表(实际上是BitSet)的总和,我遇到了溢出的情况,并注意到返回类型/ product)是Int。范围/列表中是否有任何方法总结或将所有值乘以Long?在scala中减少整数/整数范围
val x = 1 to Integer.MaxValue
println(x.sum) //prints -1453759936
感谢
转换的元素龙(或BigInt有应该是走那么远),同时总结:
x.view.map(_.toLong).sum
你也可以回去折
x.foldLeft(0L)(_ + _)
(注:你应该总结过范围内,也许它会更好做一点数学,但我明白这不是你所做的事实)
这是不是很有效,但最简单的方法:
val x = 1L to Int.MaxValue
println(x.sum) //prints 2305843008139952128
如果需要X包含整数的,而不是多头,你可以做
val x = 1 to Int.MaxValue
println(x.foldLeft(0L)(_+_))
比较:
>> val x = 1 to Int.MaxValue
x: scala.collection.immutable.Range.Inclusive with scala.collection.immutable.Range.ByOne = Range(...)
随着:
>> val x = 1L to Int.MaxValue
x: scala.collection.immutable.NumericRange.Inclusive[Long] = NumericRange(...)
注意,首先使用Int.to
,而后者使用的Long.to
(其中Int.MaxValue被自动上变频)。当然,连续整数序列的总和有一个很好的离散公式:)
快乐编码。
看看https://我ssues.scala-lang.org/browse/SI-4658为未来的改进。 :-) – soc
@soc非常好,它使它稳定:) – 2011-08-26 17:02:24
Range.Long(1, Int.MaxValue, 1).sum
我喜欢第二个。谢谢.. – Ajay