5

我想做 64 位算术(不是自然数),所以我需要两个 long 的乘法来静默溢出。

(unchecked-multiply Long/MAX_VALUE 3)

成功了。但

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

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

(Clojure 1.5.1)

4

1 回答 1

7

在第一种情况下,两个参数都是未装箱long的 s,因此使用了(long, long)of 的重载clojure.lang.Numbers.unchecked_multiply。正如预期的那样,它不会引发溢出。

在第二种情况下,n被装箱,因此(Object, Object)调用重载,这只是委托给multiply引发溢出的方法。

你需要说

(unchecked-multiply (long n) 3)

以便使用(long, long)过载。

于 2013-09-09T13:35:30.280 回答