gpt4 book ai didi

php - 为什么 PHP 中的 float 减法不同于 C

转载 作者:搜寻专家 更新时间:2023-10-31 21:08:35 25 4
gpt4 key购买 nike

C代码

#include <stdio.h>

union
{
float f;
unsigned int u;
} myun;


int main ( void )
{
float a,b,c;

a= 4501.490234;
b= 4501;

c=a-b;

myun.f=a; printf("0x%08X %f\n",myun.u,myun.f);
myun.f=b; printf("0x%08X %f\n",myun.u,myun.f);
myun.f=c; printf("0x%08X %f\n",myun.u,myun.f);

return(0);
}

结果是:

0x458CABEC 4501.490234
0x458CA800 4501.000000
0x3EFB0000 0.490234

我的 PHP 代码:

<?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

所以有两个问题。
1、减法结果不同:f3fffa3e和0x3EFB0000
2. 即使是相同的 0x3EFB0000 也有不同的表示:0.490234375 和 0.490234

最佳答案

  1. 你需要输出相同的数字percision

  2. c float 使用 4 字节存储数字,php float 始终使用 8 字节存储数字。

用 double 测试你的代码。

关于php - 为什么 PHP 中的 float 减法不同于 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27438278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com