首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP BIGINT表示

PHP BIGINT表示
EN

Stack Overflow用户
提问于 2013-10-22 22:44:58
回答 1查看 2.6K关注 0票数 0

我正在试验BIGINT值的PHP表示(这些值是表中的键),为了测试PHP如何将大数作为字符串/浮点值处理,我编写了一个小测试:

代码语言:javascript
复制
<?php
 echo "PHP_INT_MAX=".PHP_INT_MAX."\n"; 
 $x = "9223372036854775107";
 echo "Defining x as : 9223372036854775107\n";
 $y = floatval($x);
 echo "float of x: ".$y."\n";
 echo "float to string using strval: ".strval($y)."\n";
 echo "float to string using sprintf: ".sprintf( "%.0f", $y)."\n";
?>

所以我对输出很好奇:

代码语言:javascript
复制
PHP_INT_MAX=9223372036854775807
Defining x as : 9223372036854775107
float of x: 9.2233720368548E+18
float to string using strval: 9.2233720368548E+18
float to string using sprintf: 9223372036854774784

那我为什么要得到不匹配的值呢?(精度以php.ini文件=14表示)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-23 00:41:38

都是浮子型的。PHP为它使用了通用的标准IEEE 754

浮子大小是64。在64系统上,整数大小也是64。

但最大浮点数无分数部分而不损失精度,为9007199254740991。由于存储浮点数的格式,数字比那些数字失去了更多的精度。

在2^52=4,503,599,627,370,496和2^53=9,007,199,254,740,992之间,可表示的数字恰好是整数。对于下一个范围,从2^53到2^54,一切都乘以2,所以可表示的数字是偶数,等等。相反,对于前一个范围从2^51到2^52,间距是0.5,等等。 在从2^n到2^n+1的范围内,间距是2^n−52。因此,将一个数字舍入到最近可表示的数字(机器epsilon)时的最大相对舍入误差为2^−53。

双精度浮点格式

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19529701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档