float和double之间的差异

时间:2017-04-08 17:15:52

标签: c++ floating-point

第一个代码

    double pi=3.14159,a=100.64;
cin>>a;
double sum=(a*a)*pi;
cout <<fixed<<setprecision(4)<<"Value is="<<sum<<endl;
return 0;

值为= 31819.3103 第二个代码

    float pi=3.14159,a=100.64;
float sum=(a*a)*pi;
cout <<fixed<<setprecision(4)<<"Value="<<sum<<endl;
return 0;

值为= 31819.3105 为什么两个值之间存在差异?

1 个答案:

答案 0 :(得分:1)

floatdouble(以及c++中可用的所有其他浮点类型)中,值以浮点形式表示:存储x = m * 2^p,值mp将写入内存。

显然,并非所有实数都能以这种形式表示(特别是考虑到mp的最大长度是有限的)。所有不能以这种形式表示的数字都舍入到最近的邻居之一。由于3.14159和100.64都是二进制系统中的无限分数,因此它们都是四舍五入的,当你写a = 3.14159时,a实际上有点不同。

随后,对舍入值进行某些表达式计算的结果不准确,如果我们使用不同的舍入模式可能会有所不同,这就是您看到结果的原因。

在大多数架构上,使用double获得的值可能更精确,因为double和编译器使用更多的尾数位数。要获得更高的精度,请考虑使用long double