【发布时间】:2014-03-28 16:58:03
【问题描述】:
在 java 中运行 kmeans 聚类时,数据点 0.33 和 0.99 之间的绝对差值显示为 0.659999999 而不是 0.66。
为什么会这样?
保存数据的两个变量都是double 类型,我正在使用Math.abs() 函数。
我只在 0.99 中看到过这样的问题。使用其他值相减时,结果很好。
感谢您的帮助
【问题讨论】:
-
参见Floating Point Arithmetic: Issues and Limitations - 文章来自 Python 文档,但问题与语言无关。二进制浮点数在很多情况下无法准确存储十进制浮点数。
-
这个视频很好地解释了这一点。 youtube.com/watch?v=PZRI1IfStY0
-
@Jakob:即使是你的算盘(还有你的手指和脚趾)也只有有限数量的可用位;-P
-
@JensG 是的,但是用我的手指添加会得到正确的结果,而不是 1 个手指 + 1 个手指 = 1.99999899 个手指 :)
-
永远永远永远,无论如何永远!
标签: java floating-point absolute