C++ 浮点数的大小比较

C++ 浮点数的大小比较

  • 一、C++的精度损失
  • 二、浮点数比较
  • 三、总结


一、C++的精度损失

浮点数的存储格式:

符号位指数位尾数位
sign bitExponentMantissa

浮点数分为单精度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
}

三、总结

浮点数的精度损失可以根据实际情况自定义,但不可使用==来比较两个浮点数是否相等。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部