浅谈PHP浮点数的精确运算

浅谈PHP浮点数的精确运算
BC是二进制计算器的缩写,BC *函数参数都是操作数加上一个可选的{ int表},如字符串(字符串的字符串left_operand bcadd美元,美元right_operand { int美元,规模})。如果没有提供的收敛,是利用函数的默认值。这里的大量代表直接由0-9的字符串,和计算的结果也是一个字符串。

bcadd添加两个高精度数

bccomp比较两个高精度的数字,返回1, 0, 1

bcdiv二高精度数字鸿沟

bcmod -高精度数字余数

bcmul -乘二高精度数字

高精度数字电力bcpow

高精度数字电源模块bcpowmod,数论中很常用的

bcscale -配置默认的小数位数相当于规模=公元前Linux

bcsqrt高精度数字的平方根

bcsub个高精度的数字减去

首先,看一段代码:
< PHP
$ = 0.1;
$ = 0.7;
var_dump(($ + $ B)= = 0.8);

打印值为布尔false。

这就是为什么PHP手册有以下浮点数的警告信息:

警告

浮点数精度

很显然,一个简单的小数,如0.1或0.7,不能转换成一个内部二进制格式而不会丢失一点精度,这将造成混乱:例如,(0.1 + 0.7)* 10通常返回7,而不是8,因为结果的内部表示类似于7.9999999999。

这与一个事实,即不可能准确地表示有限小数位数的小数部分。例如,十进制1 3变成0 3333333…

所以千万不要相信浮点数的结果是精确到最后的,永远不要比较两个浮点数是否相等,如果你需要更高的精度,你应该使用任何精确的数学函数或GMP函数。

所以上面的公式应该重写。
< PHP
$ = 0.1;
$ = 0.7;
var_dump(bcadd($,$,2)= = 0.8);

这可以解决浮点数的计算问题。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部