浮点数和双精度之间的区别

Dfference between float and double

本文关键字:区别 之间 双精度 浮点数      更新时间:2023-10-16

第一个代码

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 为什么两个值之间的差异?

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

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

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

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