我有以下 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: Negative exponent
知道为什么吗?
我在 Windows 上使用 jruby-9.0.0.0.pre2-p0
最佳答案
这里有两件事在起作用。首先,在 JVM 中,所有数字都经过签名。因此,当 r 变得足够大以致于高位被设置时,数字实际上变为负数,从而产生错误。第二件事是,每次执行 b.times
循环时,r
都会被重新分配,以便在下一次迭代期间 r
的值传递给 knuth
的值要大得多,导致 r
的新值再次大幅增加,依此类推,直到 r
变为负数。
关于java.lang.ArithmeticException : Negative exponent in jruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30765980/