所以,我抓住了最新的数字塔进行了几次快速计算,发现返回的数字有" N"在末尾。为什么?这是什么意思?
clojure.math.numeric-tower=> (expt 64 20)
1329227995784915872903807060280344576N
clojure.math.numeric-tower=> (expt 36 20)
13367494538843734067838845976576N
答案 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