java - 高效计数器 float 错误

标签 java matlab floating-point floating-accuracy

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

Java:

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的最有效(计算)方法是什么?低于该值会返回 true 吗?

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

我需要对数十万个 float 进行操作,因此优化在这里很重要。

最佳答案

比较 float 的最好方法是选择一些小的 epsilon,然后比较两个 float 之间的差异是否小于该 epsilon。即

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

关于java - 高效计数器 float 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25042083/

相关文章:

matlab - 是否可以在 Windows 8 上安装适用于 Windows 7 的 Windows SDK?

matlab - 避免逻辑挤压函数中的无穷大

java - 分离数组数字并将它们保存在 float 中

c - 二进制到 float

java - 使用局部变量或内联链方法更好吗?

java - Eclipse E4 中的 FilteredItemsSelectionDialog

java - 从重写方法调用(非公共(public))方法

java - 在 Java 中删除文件的内容

java - 以 3.5 字节存储纬度

matlab - 如何仅重命名 MATLAB 表中的少数变量?