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

标签 java floating-accuracy floating-point-precision

我知道浮点运算很棘手,但我不确定如果先除法再逆乘,是否会出错。写在代码中,这个方法是否可能返回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/

相关文章:

xcode - 小浮点值的 Swift 数学运算

c++ - odeint : complex and higher precision types

java - 广泛搜索 - 仍然没有解决 If 语句错误的问题

java - 如何防止混淆器从输出 jar 中删除 "module-info.class"?

python - 为什么 (0.0006*100000)%10 是 10

python - 一减去一个小数等于一吗?处理小数字

PHP 可靠计算立方根

java - Vaadin 14 单选按钮组显示自定义字符串作为选项

java - 帮助选择基于java组件的Web框架

python-3.x - 数组的列求和 - 两种方法,两种不同的结果