转载+比较两个浮点数是否相等是不安全的

转载 比较两个浮点数是否相等是不安全的转载 比较两个浮点数是否相等是不安全的 原文地址:比较两个浮点数是否相等是不安全的作者:yu000hong在以前的时候,浮点计算使用的是软件方式完成的,效率比较低

转载比较两个浮点数是否相等是不安全的 转载比较两个浮点数是否相等是不安 全的 原文地址:比较两个浮点数是否相等是不安全的作者:yu000hong在以前的时 候,浮点计算使用的是软件方式完成的,效率比较低。现代CPU大多数都带有设计 良好的浮点运算单元,这样以来浮点运算与整数运算之间的性能差异就变小了。虽 然浮点运算在有了FPU之后逐渐流行起来,但是时至今日,仍然有很多程序员不了 解浮点格式所固有的缺陷。从本质上讲,浮点运算只是实数运算的一个近似。如果 一个软件工程师不了解这种近似所带来的问题,那这种不精确的表示法就会给其所 编写的软件带来非常严重的问题。 浮点数只能表示一个实数的近似值。原因是可能存在的实数有无穷多个,可以 用数轴一一表示,但浮点表示法只有有限的位数。因此,浮点表示法仅能表示有限 个不同的数。当某个浮点数格式无法精确表示某个实数时,作为替代只能选用一个 最接近的,它能够精确表示的浮点数。整数是无法表示任何小数的,整数的另一个 问题是它们只能表示范围在0~2^n-1或者-2^(n-1)~2^(n-1)- 1的数。定点数倒是可以表示小数,但是代价是能表示的整数更少,这就是动 态范围问题,不过已经被浮点格式解决了。 考虑一个16位无符号定点格式,它使用8位作为小数部分,8位作为整数部 分。而整数部分可以表示的范围是0~255,而小数部分可以表示0以及2^(-8)到1 之间的小数,精度大约是2^(-8)。现在假定在一次运算中只需要两位来表示小数 值0.0,0.25,0.5,0.75,不幸的是小数部分的其他六位不得不被浪费了。如果 能够将这些位用于整数部分,把整数的范围从0~255扩展到0~16383岂不是很好? 其实,这就是浮点表示法的基本原理。在浮点数中,小数点可以根据需要在各个位

腾讯文库转载+比较两个浮点数是否相等是不安全的