java.lang.ArithmeticException:jruby中的负指数

时间:2015-06-10 19:50:57

标签: java jruby

我有以下JRuby代码:

def knuth(a, n, b)
   if n ==1
      r = a**b
   else
      r = 1
      b.times do
         r = knuth a, n-1, r
      end
   end
   return r
end
k = knuth 3, 4, 5
puts k
puts k.size

但它给了我

  

java.lang.ArithmeticException:负指数

任何想法为什么?

我在Windows上使用jruby-9.0.0.0.pre2-p0

1 个答案:

答案 0 :(得分:1)

这里有两件事在起作用。首先,在JVM中,所有数字都已签名。因此,当r增长到足以使高阶位设置时,数字实际上变为负数,因此错误。第二件事是,每次通过b.times循环r时都会被重新分配,以便在下一次迭代中传递给r的{​​{1}}的值更大,导致knuth的新值再次大幅增加,依此类推,直到r变为负值。