因此,我抓住了最新的数字塔进行了几次快速计算,并发现返回的数字最后有"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)