使用"<="或">="比较浮点数



我知道我不应该使用==!=来比较浮点数,但我应该使用其他比较运算符(如<<=(来比较它们吗?

对于浮点,您可以使用PHP的bcmath扩展:

对于任意精度的数学,PHP提供二进制计算器,它支持任何大小的数字,精度高达2147483647(或0x7FFFFFFF(小数,如果有足够的内存,以字符串表示。

特别是,bccomp()采用两个参数。如果它们相等,则返回0,如果第一个参数较大,则返回1,如果第二个参数较大则返回-1。第三个参数指示您要查找的精度的小数位数。

bcmath('12.555437830', '12.555437829', 10);
// returns 1

注意,这个函数的一个缺点是参数被视为字符串,尽管PHP的松散类型通常使得这不是一个问题。

比较浮点数是否相等经常有问题的原因是浮点运算只接近实数。因此,如果我们有两个用浮点运算计算的数字xy,那么评估x == y通常不会告诉我们用精确数学计算的两个数字xy是否相等。换句话说,询问x == y是否确实不能给我们想要的答案(除非我们为此仔细设计和分析了代码(。

关系运算符(如<(也存在同样的问题。如果我们有xy,它们中的一个或两个与理想计算的xy相差一些小的量,那么x < y可能是真的,而x<y为false,反之亦然。

这个问题没有普遍的解决办法。在某些应用程序中,错误可能是可以容忍的。在一些应用中,可以导出浮点误差e的界,这样我们就可以证明,例如,如果x < y-e为真,那么x<y为真。(但是,如果x < y-e为假,则我们不确定x<y。(因此,适当的解决方案取决于具体的应用。

相关内容

  • 没有找到相关文章

最新更新