JVM 上的 Clojure 如何将浮点数转换为带有尾随垃圾数字的双精度数?
How does Clojure on the JVM convert from a float to a double with trailing garbage digits?
我运行:
(double (float 3.14159))
我得到:
3.141590118408203
如果我运行它下降到:
(double (float 3.141))
我得到:
3.1410000324249268
这种转换是通过什么方法发生的?
这与浮点运算的一般精度问题有关;计算机上的浮点数 不直接映射到十进制数 ,因此浮点数和双精度数的标准十进制显示是四舍五入的。换一种说法;这里的 float 和 double 具有完全相同的值,但显示时它们的舍入不同。
=> (= (double (float 3.14159)) (float 3.14159))
true
在 JVM 上,Why converting from float to double changes the value? and Convert float to double without losing precision 可能会有帮助。
我运行:
(double (float 3.14159))
我得到:
3.141590118408203
如果我运行它下降到:
(double (float 3.141))
我得到: 3.1410000324249268
这种转换是通过什么方法发生的?
这与浮点运算的一般精度问题有关;计算机上的浮点数 不直接映射到十进制数 ,因此浮点数和双精度数的标准十进制显示是四舍五入的。换一种说法;这里的 float 和 double 具有完全相同的值,但显示时它们的舍入不同。
=> (= (double (float 3.14159)) (float 3.14159))
true
在 JVM 上,Why converting from float to double changes the value? and Convert float to double without losing precision 可能会有帮助。