PHP浮点数运算
你看似有穷的小数, 在计算机的二进制表示里却是无穷的。
1、浮点数运算出现的问题
1 <?php 2 3 // 加 4 $a = 0.1; 5 $b = 0.7; 6 $c = intval(($a + $b) * 10); 7 echo $c."<br>"; 8 // 输出:7 9 10 // 减 11 $a = 100; 12 $b = 99.98; 13 $c = $a - $b; 14 echo $c."<br>"; 15 // 输出:0.019999999999996 16 17 // 乘 18 $a = 0.58; 19 $b = 100; 20 $c = intval($a * $b); 21 echo $c."<br>"; 22 //输出:57 23 24 // 除 25 $a = 0.7; 26 $b = 0.1; 27 $c = intval($a / $b); 28 echo $c."<br>"; 29 // 输出:6
上面计算的结果显然不符合我们的预期,要搞明白其中的原因, 首先我们要知道浮点数的表示(IEEE 754)。
2、 IEEE754标准
IEEE754是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式。
我们现在在用的计算机基本上都是基于这个标准来表示浮点数的,包括我们熟悉的短浮点数(float)、长浮点数(double),它们俩的表示方法相同,区别仅仅是阶码E和位数M的位数不同。
浮点数IEEE 754
的标准形式:
3、任意精度数学函数
4、浮点数与定点数