浮点数是如何在计算机中表示的?
IEEE754标准-分段表示法
单精度浮点数-32bit:符号位(1)+指数位(8)+尾数(23)
双精度浮点数-64bit:符号位(1)+指数位(11)+尾数(52)
对于精度要求高的场合,超过了尾数所能表示的最大精度就无法表达→近似表达
通过bitset快速查看浮点数的二进制编码
浮点数运算的坑(举例)• 𝟑 ∗ 𝟑 竟然小于 3
浮点数比较避坑
避坑场景
• 判定相等
• 判定大于
• 判定小于
• 判定大于等于
• 判定小于等于
• 方法
引入极小数𝜺 (Epsilon,eps) 一般地 const double eps = 1e-8
判断一下这两个数的绝对值,即在数轴上的距离是否小于精度 eps。
判定相等
a 在 [b-eps, b+eps] 的区间中时,则判断为 a==b 成立,
即fabs(a-b)<eps
一般可以采用宏定义
判定大于
如果一个数 a 要大于 b,那么就必须在误差 eps 的扰动范围之外大于 b ,因此只有大于 b+eps的数才能判定为大于 b 。
即 a 减 b 大于 eps, a-b > eps。
判定大于等于
判定小于和小于等于的方法与大于和大于等于的相同
判断浮点数是否为零
单精度浮点数
if( fabs(a) <= 1e-6)
双精度浮点数
if( fabs(b) <= 1e-15 )