双精度浮点数double

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);//都可以

综上:

  1. 用 scanf() 函数输入 double 类型的变量时,转换说明中的转换字符(占位符)只能用 lf,即%lf,写成 %f 无法正确输入double型数据;
  2. 用 printf() 函数输出 double 类型的变量时,转换说明中的转换字符(占位符)可用%lf 或%f,皆能正确输出,且输出结果一致。
  3. 为简单与一致性起见,在对 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

你可能感兴趣的:(c++)