有效地计算浮点数错误

时间:2014-07-30 16:27:41

标签: java matlab floating-point floating-accuracy

我在Java和MATLAB中都遇到了问题,其中两个数字显然应该相同。

爪哇:

float f1 = 0.3f-0.2f;
float f2 = 0.4f-0.3f;
System.out.println(f1==f2); // Prints false

System.out.println(f1); // Prints 0.10000001
System.out.println(f2); // Prints 0.099999994

显然f1应该等于f2。替换下面equals的最有效(计算)方法是什么?

public boolean equals(float f1, float f2){
    return f1 == f2;
}

我需要操作数十万个浮点数,因此优化非常重要。

1 个答案:

答案 0 :(得分:4)

比较浮点数的最佳方法是选择一些小epsilon,然后比较两个浮点数之间的差异小于epsilon。即。

if ( Math.abs(f1 - f2) < .00001){
    return true;
}