【发布时间】:2012-10-19 07:04:09
【问题描述】:
我写了一些代码,应该对 1
sum = 0
(1..1000).each do |n|
sum += n**n
puts "n = #{n}, sum = #{sum}"
end
由于某种原因,在 28 号之后输出为负数:
n = 29, sum = -2015400977700573523892329442490139437391867
知道为什么会这样吗?
【问题讨论】:
-
这是哪个版本的 Ruby?它应该切换到 bignums 以避免溢出/环绕,至少在 1.9.3 和 1.8.7 中是这样。
-
代码对我来说在 1.8.7 中运行良好,因此到 bignums 的转换在那里也运行良好。这从 n=16 开始。
-
也许您应该显示为
arr = 1..28获得的输出。 -
你没有平方它。除了 2 之外,它本身并没有平方。
-
在 ruby 1.8.7 上,我在迭代 28 上得到负值,但在 ruby 1.9.3 上,我得到了我期望的结果。我怀疑这个算法中的某些东西会诱使 ruby 在它应该使用
Bignum时不使用它......
标签: ruby integer exponentiation