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

Bri*_*uch 10 clojure

因此,我抓住了最新的数字塔进行了几次快速计算,并发现返回的数字最后有"N".为什么?这是什么意思?

clojure.math.numeric-tower=> (expt 64 20)
1329227995784915872903807060280344576N
clojure.math.numeric-tower=> (expt 36 20)
13367494538843734067838845976576N
Run Code Online (Sandbox Code Playgroud)

ove*_*ink 16

这是以下字面形式BigInt:

user=> (type 1N)
clojure.lang.BigInt
Run Code Online (Sandbox Code Playgroud)

与,例如:

user=> (type 1)
java.lang.Long
Run Code Online (Sandbox Code Playgroud)

要么

user=> (type 1.0)
java.lang.Double
Run Code Online (Sandbox Code Playgroud)

还有M后缀BigDecimal.

user=> (type 1M)
java.math.BigDecimal
Run Code Online (Sandbox Code Playgroud)

我不确定所有提升到任意精度的规则(BigInt,BigDecimal).我想大多数的"常规"数学函数不会提升到任意精度,但也有少数做(例如+',-',*',inc',dec').

例如定期+溢出:

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

+'促进:

user=> (+' Long/MAX_VALUE 1)
9223372036854775808N
Run Code Online (Sandbox Code Playgroud)