C++ 浮点数的大小比较
C++ 浮点数的大小比较
- 一、C++的精度损失
- 二、浮点数比较
- 三、总结
一、C++的精度损失
浮点数的存储格式:
| 符号位 | 指数位 | 尾数位 |
|---|---|---|
| sign bit | Exponent | Mantissa |
浮点数分为单精度float和双精度double,32位和64位系统存储位数略有不同。
相对于二进制存储小数,假设只用1位小数存储:
则精度为0.5:
.1 表示 0.5
.0 表示 0.0
以此类推:
精度 e = 1 2 n 精度 e ={1 \above{1pt} 2 ^ n } 精度e=2n1
二、浮点数比较
#include
#include int main()
{double a = 1.1; //1.1000000000000001double b = 1.1 + 1e-16; //1.1000000000000001,精度损失bool ret = std::abs(a - b) < std::abs(std::min(a, b)) * std::numeric_limits<double>::epsilon(); //true
}
三、总结
浮点数的精度损失可以根据实际情况自定义,但不可使用==来比较两个浮点数是否相等。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
