Clojure,我希望长乘法溢出

标签 clojure integer-overflow

我想做 64 位算术(不是自然数),所以我例如需要两个长整型的乘法才能悄无声息地溢出。

(unchecked-multiply Long/MAX_VALUE 3)

就可以了。但是

(def n Long/MAX_VALUE)
(unchecked-multiply n 3)

给出溢出异常。我做错了什么?

(Clojure 1.5.1)

最佳答案

在第一种情况下,两个参数均未装箱 long s,所以(long, long)过载clojure.lang.Numbers.unchecked_multiply用来。正如预期的那样,它不会引发溢出。

在第二种情况下,n已装箱,因此 (Object, Object)调用重载,并且简单地将其委托(delegate)给 multiply抛出溢出的方法。

你需要说

(unchecked-multiply (long n) 3)

这样(long, long)使用了重载。

关于Clojure,我希望长乘法溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18699292/

相关文章:

clojure - 为什么我无法动态绑定(bind)非动态变量?

clojure - Leiningen uberjar "empty"运行时间

clojure - 运行服务器时注册多个处理程序

PHP/MySQL 毫秒到小时 :Minutes:Seconds

c++ - "-ftrapv"和 "-fwrapv": Which is better for efficiency?

c++ - 数组在 C++ 中自动填充自身

c - 如何处理嵌入式 C 中的环绕计数器

clojure - 序言问题的适用性

html - 如何在重新构建、重新代理应用程序中使用资源文件夹中的图像?

c++ - C++中俄罗斯农民算法中的整数溢出