我知道浮点运算很棘手,但我不确定如果先除法再逆乘,是否会出错。写在代码中,这个方法是否可能返回false
:
public boolean calculate(float a, float b) {
float c = a / b;
return (a == (c * b));
}
最佳答案
简单的回答是 - 是的。此示例肯定会返回 false:
public boolean alwaysFalse(){
float a=Float.MIN_VALUE;
float b=Float.MAX_VALUE;
float c = a / b;
return a == c * b;
}
已更新
更一般的答案是,有两种情况 false
发生在你的方法中:
1) 当有效数溢出时(即除法计算出的位数多于有效数可以容纳的位数)
2) 在指数达到最小值之后,你不能在不丢失有效数的最低有效位的情况下进一步划分
您可以为 'a
' 构造保证为 false 的示例 - 例如当有效位的最高和最低有效位为 1(二进制)时:10000...000001e10 等
关于java - 在这种情况下是否可能出现浮点错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27680326/