为什么PHP中的浮点数减法不同于C

为什么PHP中的浮点数减法不同于C,php,floating-point,Php,Floating Point,C代码 我的PHP代码: 0x458CABEC 4501.490234 0x458CA800 4501.000000 0x3EFB0000 0.490234 因此有两个问题。 1.不同的减法结果:f3fffa3e和0x3EFB0000 2.即使相同的0x3EFB0000也有不同的表示法:0.49024375和0.490234 您需要以相同的格式输出数字 c float使用4字节存储数字,php float始终使用8字节存储数字 使用double测试代码。Php浮点精度: 0x458CABE

C代码

我的PHP代码:

0x458CABEC 4501.490234
0x458CA800 4501.000000
0x3EFB0000 0.490234
因此有两个问题。
1.不同的减法结果:f3fffa3e和0x3EFB0000
2.即使相同的0x3EFB0000也有不同的表示法:0.49024375和0.490234

  • 您需要以相同的格式输出数字

  • c float使用4字节存储数字,php float始终使用8字节存储数字

  • 使用double测试代码。

    Php浮点精度:
    0x458CABEC 4501.490234
    0x458CA800 4501.000000
    0x3EFB0000 0.490234
    
    <?php
    $a = 4501.490234;
    $b = 4501;
    $c = $a - $b;
    echo bin2hex(pack("f", $a))."\n";
    echo bin2hex(pack("f", $b))."\n";
    echo bin2hex(pack("f", $c))."\n";
    
    $r = unpack('ffloat',"\x00\x00\xFB\x3E");
    echo $r['float']."\n";
    
    ecab8c45
    00a88c45
    f3fffa3e
    0.490234375