项目空间

学习笔记N-174

计算精度问题

更新
内容块
10
阅读
约 1 分钟
路径
学习笔记 / C++ / C++基础

两个例子

1.在浮点数是否相等的判断时要让他们的差小于一个极小的数,而不是直接相等(<1e-9)

2.计算A>B× 二分之3时需要用十字相乘让两边同时乘来判断,而不能直接写a是否大于b乘2除以3

原理

计算机底层使用二进制浮点数(IEEE 754标准)来近似表示实数,绝大多数十进制小数无法被精确表示

直接原因:浮点数运算存在舍入误差(Round-off Error)

  • •在二进制中,0.1 是一个无限循环小数(就像十进制的 1/3 = 0.333...)。
  • •当你写 double a = 0.1 + 0.2; 时,计算机实际存储的是 0.30000000000000004(略有偏差)。
  • •如果你写 double b = 0.3;,它存储的是 0.29999999999999999。