java.lang.ArithmeticException : Negative exponent in jruby

标签 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: 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/

相关文章:

ruby - 如何使用 JRuby 从 exploded jar 运行 logstash

java - 为什么这段代码中永远不会抛出 IOException

ruby-on-rails - Faye in jruby on rails

java - 将 Java 与解释型语言混合 Inline::Java vs. Jython vs. Jruby

scala - Mirah 比 JRuby、Groovy 和 Scala 提供了什么?

tomcat - warbler WAR 部署在 tomcat,相对 URL root 有问题

java - 将属性编辑器应用于模型中的对象

java - 在 HashMap 中搜索会返回所有存储的值,而不仅仅是搜索到的值

java - 将远程 Mysql 连接到 Netbeans

java - 哪个是 Spring 4 支持的最低 Java 版本