在这种情况下是否可能出现浮点错误?

Iva*_*kov 5 java floating-accuracy floating-point-precision

我知道浮点运算是棘手的,但我不确定如果你有一个除法后跟反向乘法是否有可能出错.用代码编写,这个方法可能会返回false:

public boolean calculate(float a, float b) {
        float c = a / b;
        return (a == (c * b));
}
Run Code Online (Sandbox Code Playgroud)

sbe*_*zin 4

简单的答案是——是的。这个例子肯定返回 false:

public boolean alwaysFalse(){
        float a=Float.MIN_VALUE;
        float b=Float.MAX_VALUE;
        float c = a / b;
        return a == c * b;
}
Run Code Online (Sandbox Code Playgroud)

更新的
更一般的答案是,false您的方法中会发生两种情况:
1)当有效数溢出时(即除法计算的位数超出有效数可以容纳的位数)
2)在指数达到最小值之后,因此您无法进一步除以丢失有效数的最低有效位

您可以为 ' ' 构建保证 false 的示例a- 例如当有效数的最高和最低有效位为 1(二进制)时:10000...000001e10 等