第一个代码
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 为什么两个值之间存在差异?
答案 0 :(得分:1)
在float
和double
(以及c++
中可用的所有其他浮点类型)中,值以浮点形式表示:存储x = m * 2^p
,值m
和p
将写入内存。
显然,并非所有实数都能以这种形式表示(特别是考虑到m
和p
的最大长度是有限的)。所有不能以这种形式表示的数字都舍入到最近的邻居之一。由于3.14159和100.64都是二进制系统中的无限分数,因此它们都是四舍五入的,当你写a = 3.14159
时,a
实际上有点不同。
随后,对舍入值进行某些表达式计算的结果不准确,如果我们使用不同的舍入模式可能会有所不同,这就是您看到结果的原因。
在大多数架构上,使用double
获得的值可能更精确,因为double
和编译器使用更多的尾数位数。要获得更高的精度,请考虑使用long double
。