在我的课程中,我被告知:
连续值大约在内存中表示,因此使用浮点数进行计算会产生舍入误差。这些是位模式的微小差异。因此,e==f如果e和f为浮点,则测试是不安全的。
e==f
e
f
指的是Java。
这是真的?我已经将比较语句与doubles和floats一起使用,并且从未遇到过舍入问题。我从来没有读过类似的教科书。虚拟机肯定占了这一切吗?
double
float
是真的。
这是如何在内存中以有限数量的位表示浮点值的固有限制。
例如,该程序显示“ false”:
public class Main { public static void main(String[] args) { double a = 0.7; double b = 0.9; double x = a + 0.1; double y = b - 0.1; System.out.println(x == y); } }
通常,您不决定与’==’进行精确比较,而是询问数字是否足够“接近”:
System.out.println(Math.abs(x - y) < 0.0001);