打印浮点数4.5e-45f,4.8e-45f和5.1e-45f会返回奇怪的结果

时间:2015-11-27 05:58:45

标签: c++ floating-point

以下C ++程序打印出三个不同的32位浮点数,结果很奇怪。谁能解释一下?

#include <iostream>

int main()
{
  std::cout << "result1 = "<<4.5e-45f <<std::endl;
  std::cout << "result2 = "<<4.8e-45f<<std::endl;
  std::cout << "result3 = "<<5.1e-45f<<std::endl;

}

结果

result1 = 4.2039e-45
result2 = 4.2039e-45
result3 = 5.60519e-45

1 个答案:

答案 0 :(得分:3)

32位浮点数只能存储大约1.18E-38的数字。可以存储小于该值的值,但它们将非规范化,以较低的精度存储。您尝试显示的数字正好可以与零区分开,因此与您尝试存储的数字相比,实际存储值中会出现较大的错误。如果您需要使用较小的数字,请使用double