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