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.1000000000000001
	double 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
}

三、总结

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

你可能感兴趣的:(C++,ubuntu,awk,c++)