double类型介绍
双精度浮点数(double)是计算机使用的一种数据类型。比起单精度浮点数,双精度浮点数(double)使用 64
位(8字节) 来存储一个浮点数。 它可以表示十进位制的15或16位
有效数字。
sign bit(符号): 用来表示正负号
exponent(指数): 用来表示次方数
mantissa(尾数): 用来表示精确度
注意这里的尾数只有52位,实际上能够存储53位。这里面有一个规格化的过程。
为了最大限度提高精确度,可以要求尾数规范化,把尾数处理到大于等于1而小于2的区间内,便可省去前述的“1”。
例如11.101 x 21011 规范化为1.1101 x 21101 ,存储尾数只须存储1101即可。
所以能够精确表示的最大整数是253 -1(9007199254740991)
c语言double类型的输入输出
double a;
scanf("%f",&a); //应用scanf("%lf",&a);
执行上面语句时,发现double类型的输入不能使用%f进行输入,得用%lf才能正常得到a的值。
而在输出double类型时却可以用%f,这是因为printf("%f",a);在执行时C自动将float型的参数转换成double型。
故double型的输入输出形式如下:
double a;
scanf("%lf",&a);
printf("%f",a);
printf("lf",a);//都可以
综上:
- 用 scanf() 函数输入 double 类型的变量时,转换说明中的转换字符(占位符)只能用 lf,即%lf,写成 %f 无法正确输入double型数据;
- 用 printf() 函数输出 double 类型的变量时,转换说明中的转换字符(占位符)可用
%lf 或%f
,皆能正确输出,且输出结果一致。 - 为简单与一致性起见,在对 double 类型的变量输入输出时,建议都用
%lf
占位符。
参考:
https://en.wikipedia.org/wiki/Double-precision_floating-point_format
https://zh.wikipedia.org/wiki/雙精度浮點數
https://blog.csdn.net/u011415955/article/details/37322587
https://blog.csdn.net/clxjoseph/article/details/8731363