Ioa*_*nna 3 java math clojure sqrt
为什么以下Clojure代码打印为"true"?
(请注意,最后一位数字不同)
(== (Math/sqrt 10252519345963644753026N)
(Math/sqrt 10252519345963644753025N))
Run Code Online (Sandbox Code Playgroud)
不确定这个问题是关于Clojure还是它也适用于其他语言(Java的BigInteger?).
打印它们会导致:
(str (Math/sqrt 10252519345963644753026N) " "
(Math/sqrt 10252519345963644753025N))
1.01254725055E11 1.01254725055E11
Run Code Online (Sandbox Code Playgroud)
Java Math.sqrt函数
double论据和double结果.正如各种评论所暗示的那样,这导致的转换失去了区分数字的精确度.事实上,转换到double这样做:
(= (double 10252519345963644753026N)
(double 10252519345963644753025N))
;true
Run Code Online (Sandbox Code Playgroud)
A double具有53位精度.由于10位是大约3个十进制数字,因此大约是16位十进制数字.您的号码长度为23位,因此最后几位数字在转换时会丢失.
| 归档时间: |
|
| 查看次数: |
2820 次 |
| 最近记录: |