2014-06-05 14 views
9

Also nahm ich den neuesten numerischen Turm für ein paar schnelle Berechnungen und bemerkte, dass die zurückgegebenen Zahlen "N" am Ende haben. Warum? Was heißt das?Warum enden Clojure-Nummern in der REPL mit "N"?

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

Antwort

16

Das ist die wörtliche Form BigInt ist:

user=> (type 1N) 
clojure.lang.BigInt 

gegenüber, zum Beispiel:

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

oder

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

Es gibt auch die M Suffix für BigDecimal.

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

Ich bin nicht sicher, ob alle Regeln für eine Beförderung in beliebiger Genauigkeit (BigInt, BigDecimal). Ich denke, die meisten „normalen“ mathematischen Funktionen werden nicht an beliebiger Genauigkeit zu fördern, aber es gibt ein paar, die tun (zum Beispiel +', -', *', inc', dec').

z.B. Regelmäßige + überläuft:

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

aber +' fördert:

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