Java float比double更精确?

Mus*_*afa 5 java floating-accuracy double-precision floating-point-precision

码:

class Main {
    public static void main (String[] args) {
        System.out.print("float: ");
        System.out.println(1.35f-0.00026f);
        System.out.print("double: ");
        System.out.println(1.35-0.00026);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

float: 1.34974
double: 1.3497400000000002
Run Code Online (Sandbox Code Playgroud)

??? 浮点数得到了正确的答案,但双重是从无处添加额外的东西,为什么?

是不是应该比浮动更精确?

Rah*_*thi 10

浮点数是4个字节宽,而double是8个字节宽.

检查每个计算机科学家应该知道的关于浮点运算的内容

当然双精度具有更高的精度,因此它的舍入误差略小.

将无限多个实数压缩成有限数量的比特需要近似表示.尽管存在无限多个整数,但在大多数程序中,整数计算的结果可以以32位存储.相反,给定任何固定数量的位,大多数具有实数的计算将产生无法使用那么多位精确表示的量.因此,浮点计算的结果通常必须舍入,以便适应其有限表示.该舍入误差是浮点计算的特征.

在旁注: -

我建议如果你想要精确的十进制值然后使用 java.math.BigDecimal