Ruby中的大型乘法输出结果为负

我写了一些代码,它应该为1 <= n <= 1000求和n ^ n。这是代码:

sum = 0 (1..1000).each do |n| sum += n**n puts "n = #{n}, sum = #{sum}" end 

出于某种原因,在28号之后输出结果为负:

 n = 29, sum = -2015400977700573523892329442490139437391867 

知道为什么会这样吗?

看起来这是1.8.7中的一个错误,由补丁358修复: Ruby 1.8.7中的指数返回错误的答案

(在此提交之前, numeric.c中的power计算结果未声明为volatile ,之后溢出行为似乎已得到修复。)