舍入错误?
2022-09-01 13:30:52
在我的课程中,我被告知:
连续值近似地表示在内存中,因此使用浮点数进行计算涉及舍入误差。这些是位模式的微小差异;因此,如果 和 是浮子,则该测试是不安全的。
e==f
e
f
参考Java。
这是真的吗?我使用过与 s 和 s 的比较语句,并且从未遇到过舍入问题。我从来没有在教科书上读到过类似的东西。当然,虚拟机对此负责?double
float
在我的课程中,我被告知:
连续值近似地表示在内存中,因此使用浮点数进行计算涉及舍入误差。这些是位模式的微小差异;因此,如果 和 是浮子,则该测试是不安全的。
e==f
e
f
参考Java。
这是真的吗?我使用过与 s 和 s 的比较语句,并且从未遇到过舍入问题。我从来没有在教科书上读到过类似的东西。当然,虚拟机对此负责?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);