为什么Clojure数字以" N"结尾?在REPL?

时间:2014-06-05 19:00:07

标签: clojure

所以,我抓住了最新的数字塔进行了几次快速计算,发现返回的数字有" N"在末尾。为什么?这是什么意思?

clojure.math.numeric-tower=> (expt 64 20)
1329227995784915872903807060280344576N
clojure.math.numeric-tower=> (expt 36 20)
13367494538843734067838845976576N

1 个答案:

答案 0 :(得分:16)

这是BigInt

的字面形式
user=> (type 1N)
clojure.lang.BigInt

对比,例如:

user=> (type 1)
java.lang.Long

user=> (type 1.0)
java.lang.Double

M还有BigDecimal后缀。

user=> (type 1M)
java.math.BigDecimal

我不确定促销到任意精度的所有规则(BigInt,BigDecimal)。我认为大多数“常规”数学函数不会提升到任意精度,但也有一些(例如+'-'*'inc'dec')。

e.g。常规+溢出:

user=> (+ Long/MAX_VALUE 1)
ArithmeticException integer overflow  clojure.lang.Numbers.throwIntOverflow (Numbers.java:1388)

+'宣传:

user=> (+' Long/MAX_VALUE 1)
9223372036854775808N