2
爲什麼下面的Clojure代碼打印「true」?Clojure在大整數上的數學/ sqrt精度
(請注意,這些數字在最後一個數字不同)
(== (Math/sqrt 10252519345963644753026N)
(Math/sqrt 10252519345963644753025N))
不知道這個問題,即是否只有約Clojure的,或者如果它也適用於其他語言(Java的BigInteger的?)。
打印它們導致:
(str (Math/sqrt 10252519345963644753026N) " "
(Math/sqrt 10252519345963644753025N))
1.01254725055E11 1.01254725055E11
您是否嘗試單獨在兩個數字上打印sqrt操作的結果?看起來他們可能會失去足夠的精確度,就像在有限的精度下看到的那樣。 – Brick
Math.sqrt使用double,只有15位數的精度。比這更多的數字可以用'double'精度查看樣本。 –
我不知道Clojure,但'Math/sqrt'幾乎可以肯定的是在調用底層平方根操作之前將其參數轉換爲雙精度。作爲雙打,你給出的* input *值都是相同的(因此當然輸出也是如此)。 –