PHP IEEE 754 精度错误

原创 2016年05月13日 17:56:01

运行如下代码

$t = 39.800 * 100;
echo $t.'<br>';
echo intval($t);

结果:

3980
3979


文档解释

http://php.net/manual/zh/language.types.float.php

浮点数的精度有限。尽管取决于系统,PHP 通常使用 IEEE 754 双精度格式,则由于取整而导致的最大相对误差为 1.11e-16。非基本数学运算可能会给出更大误差,并且要考虑到进行复合运算时的误差传递。

此外,以十进制能够精确表示的有理数如 0.1 或 0.7,无论有多少尾数都不能被内部所使用的二进制精确表示,因此不能在不丢失一点点精度的情况下转换为二进制的格式。这就会造成混乱的结果:例如,floor((0.1+0.7)*10) 通常会返回 7 而不是预期中的 8,因为该结果内部的表示其实是类似 7.9999999999999991118...

所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等


这里使用是学函数来解决

$t = bcmul(39.800 , 100);
echo $t.'<br>';
echo intval($t);

结果

3980
3980

版权声明:本文为博主原创文章,未经博主允许不得转载。

IEEE 754 和python

今天遇到了一个问题 arange范围不是左闭右开吗,怎么回事 然后发现是浮点数的锅,由于精度问题,浮点数是不准确的,比如 这就是导致上述问题的原因。 那只好用decimal了...
  • rush_mj
  • rush_mj
  • 2018年02月05日 14:15
  • 9

PHP IEEE 754 精度错误

运行如下代码 $t = 39.800 * 100; echo $t.''; echo intval($t); 结果: 3980 3979 文档解释 http://php.net...
  • jam00
  • jam00
  • 2016年05月13日 17:56
  • 828

C语言实现 byte 转float IEEE754

C语言根据 IEEE754 实现 byte 转float
  • xinyu391
  • xinyu391
  • 2017年08月05日 10:52
  • 303

js浮点运算精度问题和IEEE754

原文链接当我们使用一段时间的JS之后会遇到下面这个问题 0.1 + 0.2 === 0.3 // false我们可以在控制台里面看到0.1+0.2输出的并不是0.3而是0.3000000000000...
  • u012362458
  • u012362458
  • 2017年09月07日 17:17
  • 230

Java与IEEE754浅浅谈

怎么用二进制来表示小数呢?        假设我们要用二进制来表示小数5.5,怎么搞?               按照常规思路,首先用二进制表示一下5,是101,那5.5岂不就是101.10...
  • u011679955
  • u011679955
  • 2016年10月07日 17:00
  • 765

IEEE754

下载地址http://www.cs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF 
  • longronglin
  • longronglin
  • 2007年07月21日 14:53
  • 703

php没有uint64

对于C#有: int32  min~max: -2147483648 ~ 2147483647(~21亿) uint32 min~max: 0 ~ 4294967295 int64  min~max:...
  • llj1985
  • llj1985
  • 2016年06月19日 15:03
  • 1400

IEEE754 C 语言代码

void ConvertDexToIEE754(float fpointer,unsigned char *a)  //十进制转化为 IEEE745 小数 {        int Flag=0;...
  • zimiao815
  • zimiao815
  • 2016年06月02日 08:28
  • 806

IEEE754浮点数的表示方法

1.浮点数的存储格式浮点数在C/C++中对应float和double类型,我们有必要知道浮点数在计算机中实际存储的内容。IEEE754标准中规定float单精度浮点数在机器中表示用 1 位表示数字的符...
  • K346K346
  • K346K346
  • 2016年01月09日 17:08
  • 19143

IEEE 754四种舍入方向

四种舍入方向:向最接近的可表示的值:当有两个最接近的可表示的值时首选“偶数”值,这与我们常见的“四舍五入”只有一点不同,对.5的舍入上,采用取偶数的方式。 如:Round(0.5) = 0; Rou...
  • qq_20480611
  • qq_20480611
  • 2016年09月17日 18:49
  • 770
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP IEEE 754 精度错误
举报原因:
原因补充:

(最多只允许输入30个字)