float:单精度,4字节;
double:双精度,8字节。
double的精度高,但消耗内存较大,速度较慢。
关于编程时小数点后位数:
猜想:写代码时float与double类型分别小数点后精确到多少位(10进制),整数部分的位数是否对小数部分位数有影响?
#include<stdio.h>
int main()
{
float a1,a2;
double b1,b2;
a1=2.00/3.00;
a2=100000000.00/3.00;
b1=2.0/3.0;
b2=100000000/3.0;
printf("%f\t%f\n%f\t%f\n",a1,a2,b1,b2);
printf("\n%lf\t%lf\n%lf\t%lf\n",a1,a2,b1,b2);
return 0;
}
root@ubuntu:/mnt/hgfs/WinLinshare# ./a.out
0.666667 33333334.000000
0.666667 33333333.333333
0.666667 33333334.000000
0.666667 33333333.333333
由结果可以看出:在GNU环境下float与double都是精确到小数点后六位,且整数部分对小数部分精确到第几位没影响。(关于都是六位应该是编译器问题。关于浮点型变量的存储方式点击打开链接)。但由输出结果可看出,float、double的精度还可以看出差别的。
另:关于单双精度的输入输出问题
printf()中float/double都用%f //因为在printf中%f代表双精度,对float先变成双精度
scanf()中float用%f double用%lf