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

Floating point 避免浮点计算错误的最佳方法是什么?,floating-point,floating-accuracy,Floating Point,Floating Accuracy,我有两个变量a和b。第一个变量包含字符串格式的简单浮点。第二个变量包含另一个简单的浮点。我需要除以这些,然后乘以一个常数。因为数字很简单,我需要比较操作的结果,所以我需要计算无错误。实现这一目标的最佳方式是什么 public class FloatTest { public static void main(String[] args) { String a ="5"; float b =(float) 4.8; flo

我有两个变量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);
    }
}

结果以二进制形式显示为无错误。您假设48/10可以精确表示(“简单数”)。这在十进制数字中是正确的,但在位中不是。毫不奇怪,真的:
10
不是2的幂,所以除以10不是一个简单的移动浮点数的问题


如果您需要精确的数字,请不要使用像
Float
这样的有限精度格式。
Decimal
类型更合适。
Decimal
类型如何为⅓?顺便说一下,一个比“有限”更好的术语是“固定”的,用于表示双精度格式和双精度格式之间的差异,例如,
BigDecimal
格式。双精度格式具有固定的精度。
BigDecimal
格式具有任意精度。任何格式都不能有无限的精度;它们都是有限的。我现在明白了,我必须接受这个错误。我在某个地方找到了一种方法,尽管存在错误,但在大多数情况下仍然有效。在比较2个浮点数时,我必须使用类似于:
abs(x-y)
result: 24.999998