关于浮点型误差的解决方法

Posted PHP交流群 178979370

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于浮点型误差的解决方法相关的知识,希望对你有一定的参考价值。

根据结果说明,作为浮点型数据,其精度已经损失了一部分,达不到完全精确。所以永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
需要说明的是,这不是 php 的 问题,而是计算机内部处理浮点数的问题!在 C、JAVA 等语言中也会遇到同样的问题。

解决方法:需要将其控制在我们需要的精度范围内再行比较。

比如 bc 函数:

bcadd — 将两个高精度数字相加 
bccomp — 比较两个高精度数字,返回-1, 0, 1 
bcdiv — 将两个高精度数字相除 
bcmod — 求高精度数字余数 
bcmul — 将两个高精度数字相乘 
bcpow — 求高精度数字乘方 
bcpowmod — 求高精度数字乘方求模,数论里非常常用 
bcscale — 配置默认小数点位数,相当于就是Linux bc中的”scale=” 
bcsqrt — 求高精度数字平方根 
bcsub — 将两个高精度数字相减

以上是关于关于浮点型误差的解决方法的主要内容,如果未能解决你的问题,请参考以下文章

解决float型数据精度损失问题

正确生成浮点型的方法,解决sqlachemy Float浮点型的坑,生成float类型时,长度和精度均为0,导致查询不到结果!

43.关于浮点数的乘除法预算误差,一个看似没什么问题的解决方法

C语言程序设计,谭浩强老师第三版里面的一个关于浮点型数据的舍入误差问题

关于解决GPS定位设备:GPS静态漂移的方法

解决浮点型数值计算精度丢失的一种实现