避免浮点计算错误的最佳方法是什么?

时间:2020-08-28 14:46:55

标签: floating-point floating-accuracy

我有两个变量a和b。第一个变量包含字符串格式的简单浮点数。第二个变量包含另一个简单的浮点数。我需要将它们除以常数。由于数字很简单,并且我需要比较操作的结果,因此我需要计算结果没有错误。实现此目标的最佳方法是什么?

public class FloatTest {
    public static void main(String[] args) {
        String a ="5";
        float b =(float) 4.8;
        float r = Float.valueOf(a)*24/b;
        System.out.println(r);
    }
}
result: 24.999998

2 个答案:

答案 0 :(得分:0)

结果似乎是无错误的二进制文件。您假设可以正确表示48/10(“简单数字”)。十进制数字是正确的,但位数不是。确实,这并不奇怪:10不是2的幂,因此除以10并不是将点移到浮点数中的简单问题。

如果您需要精确的数字,请不要使用Float之类的有限精度格式。 Decimal类型更合适。

答案 1 :(得分:0)

您可以使用 John L. Gustafson 的“unums”,这是浮动的替代品。例如,参见 https://posithub.org/about。此外,根据 IEEE,您应该(许多实现存在错误或缺乏支持)能够使用异常——例如参见 https://www.ibm.com/docs/en/aix/7.2?topic=concepts-floating-point-exceptions

相关问题