float与double区别
引言
在C语言中,float和double都是浮点数类型,但它们在存储和处理浮点数时的精度和范围有所不同。
区别
-
精度:float类型通常包含7位有效数字,而double类型则包含15位有效数字。这是因为double类型使用了更多的位数来存储更大的指数。
-
范围:由于double使用了更多的位数来存储有效数字,因此它能够表示的数值范围比float更大。
-
存储大小:在大多数现代计算机系统中,一个float通常占用32位(4字节),而一个double通常占用64位(8字节)。
-
浮点表示法:float类型使用IEEE 754标准中的单精度浮点表示法,而double类型使用双精度浮点表示法。
-
性能:在执行数学和科学计算时,由于double类型提供了更高的精度和更大的范围,所以通常更受欢迎。然而,如果你需要节省存储空间或处理大量数据(例如,在图形处理或游戏开发中),那么使用float可能会更有优势,因为它使用的存储空间更少。
例子1
#include <stdio.h>
int main()
{
float a1=8/3.0;
printf("%f\n",a1);
int b1=sizeof (a1);
printf("%d\n",b1);
double a2=8/3.0;
printf("%lf\n",a2);
int b2=sizeof (a2);
printf("%d\n",b2);
return 0;
}
运行结果为:
2.666667
4
2.666667
8
你可能觉得,两种类型运行的结果并没有什么区别。这因为printf输出格式的限制,导致都只能输出六位小数,所以结果都相同。
例子2
修改输出的浮点型为位数:
#include <stdio.h>
int main()
{
float a1=8/3.0;
printf("%.16f\n",a1);
int b1=sizeof (a1);
printf("%d\n",b1);
double a2=8/3.0;
printf("%.16lf\n",a2);
int b2=sizeof (a2);
printf("%d\n",b2);
return 0;
}
输出结果:
2.6666667461395264
4
2.6666666666666665
8
- 你会发现float类型,只有7位有效数字的精度,在小数点后六位以后开始乱码。
- 而double类型,有15位有效数字的精度,在小数点后15位开始乱码。
如有错误,谢谢指正!