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)
简单的答案是——是的。这个例子肯定返回 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 等
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |