Hum*_*art 22 java memory floating-accuracy
在我的课程中,我被告知:
连续值大约在内存中表示,因此使用浮点数计算涉及舍入误差.这些是位模式的微小差异; 因此,
e==f如果是漂浮物e,f则测试是不安全的.
参考Java.
这是真的?我使用了doubles和floats的比较语句,并且从未遇到过舍入问题.从来没有我在课本上读过类似的东西.当然虚拟机占了这个?
Chr*_*est 51
是真的.
浮点值如何在有限位数的存储器中表示是一个固有的限制.
例如,该程序打印"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);
}
}
Run Code Online (Sandbox Code Playgroud)
而不是与'=='精确比较,你通常会决定某种程度的精确度,并询问这些数字是否"足够接近":
System.out.println(Math.abs(x - y) < 0.0001);
Run Code Online (Sandbox Code Playgroud)
Ben*_*ehn 26
这适用于Java,与使用浮点的任何其他语言一样多.它是硬件中浮点值表示的设计所固有的.
有关浮点值的更多信息:
| 归档时间: |
|
| 查看次数: |
23972 次 |
| 最近记录: |