浮点型分为两种float和double, float是单精度,double是双精度, 简单点就是double精度更高, 具体点就得看两种浮点型的位数,具体如下:
浮点型分为符号位, 指数位, 尾数位。
类型 | 符号位 | 指数位 | 尾数位 |
float | 1位(第31位) | 8位(第23-30位) | 23位(第0-22位) |
double | 1位(第63位) | 11位(第52-62位) | 52位(第0-51位) |
两种浮点型的主要区别是精度, 具体影响有多大,我们可以举个例子来进行对比,比如计算圆的周长,具体如下:
#include <stdio.h> int main(void) { float pi,r; //使用float定义 pi 和半径 double pi2,r2; //使用double定义 pi 和半径 pi = pi2 = 3.14; //给 pi 和 pi2 赋值 r = r2 = 4; //给 r 和 r2 赋值 printf("2*pi*r = %f\n",2*pi*r); //计算 2 * pi * r 并打印结果 printf("2*pi2*r2 = %f\n",2*pi2*r2); //计算 2 * pi2 * r2并打印结果 return 0; }
运行结果如下:
2*pi*r = 25.120001 2*pi2*r2 = 25.120000
结果分析,使用float的变量,计算的结果为25.120001, 使用 double的变量计算结果为25.120000, 经过计算double的结果才是对的。
所以在使用浮点型的时候,如果条件允许并且不知道计算精度时,尽量使用double型, 不然会出现无法预料的结果。