2014-06-05 19 views
9

Vì vậy, tôi nắm lấy tháp số mới nhất cho một vài tính toán nhanh chóng và nhận thấy rằng các số được trả lại có "N" ở cuối. Tại sao? Nó có nghĩa là gì?Tại sao số Clojure kết thúc bằng "N" trong REPL?

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

Trả lời

16

Đó là hình thức văn chương của BigInt:

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

so với, ví dụ:

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

hoặc

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

Ngoài ra còn có các M hậu tố cho BigDecimal.

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

Tôi không chắc chắn về tất cả các quy tắc quảng cáo có độ chính xác tùy ý (BigInt, BigDecimal). Tôi nghĩ hầu hết các chức năng toán học "thông thường" sẽ không quảng bá độ chính xác tùy ý, nhưng có một số ít thực hiện (ví dụ: +', -', *', inc', dec').

ví dụ: Thường xuyên + tràn:

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

nhưng +' khuyến khích:

user=> (+' Long/MAX_VALUE 1) 
9223372036854775808N 
Các vấn đề liên quan