C语言关键字浅析-double

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Johan_Joe_King/article/details/83956215

### C语言关键字浅析系列 ###

### ISO/ANSI C 关键字 ###

double关键字声明一种称之为“双精度”的浮点数据类型

其“双”之处在于与float浮点数据类型对比,可以表示更长的数据区间

如果需要表示更大的数值区间还可以采用long double类型

double的作用是:

定义双精度浮点类型。

1、double在系统中的存储

通常double类型的浮点数在系统中占用32位,其中8位用于表示指数和符号,24位表示有效数字(尾数)及其符号

这里所说的两个符号分别指的是指数的正负号和有效数字的正负号

如1.44E-4这个数,用double类型存储时,指数为4,指数符号为负,尾数为1.44,尾数符号为正

扫描二维码关注公众号,回复: 4201078 查看本文章

2、浮点常量

在C语言中,编写程序时浮点数上的一些缺省是看做有效的

(1)正号可以省略

3.0   4e2   -5e8   -2.54e+2   都正确

(2)可以缺少小数点或指数部分,但二者不能同时缺少

31.4e-1   有小数点和指数部分

3.14159   有小数点,没有指数部分

2e-3   有指数部分,没有小数点

9   既没有小数点也没有指数部分,系统不认为是浮点数类型,定义double的整数常量可写为9.0即可

(3)在有小数点的情况下,可以缺少纯整数部分或者纯小数部分,但二者不能同时缺少

3.14159   存在有效的纯整数部分和纯小数部分

3.   只有纯整数部分,等价于3.0(注意3后面有个小数点,可能不清晰)

.14   只有纯小数部分,等价于0.14(注意1前面有个小数点,可能不清晰)

只有一个小数点时,等于空,并不等于0

【编写程序时还需注意,浮点常量中的字符是连续的,无需在字符e前后加空格】

3、编译器眼中的浮点常量

默认情况下,编译器将浮点常量默认为double类型

这也是为什么一些算法比赛和考试的教材中,极力推荐学生遇到浮点数时尽可能使用double而不是float(当然还有其他因素)

例如,当你这样做这样的处理时:

float area;                /* 你有个float类型的变量 */
area = 3.14 * 1.0 * 1.0;   /* 3.14和1.0却被认为是double */

结果会正确,因为表达式中的三个默认的double类型浮点数按双精度计算后

得到的double结果再被截为float类型,精度得以保证

然鹅,代价是会减慢程序执行,对于一些对数据处理速度敏感的程序、设备可能不可接受

幸运的是,上面我们说的是默认情况下编译器把浮点常量认为是double,当然也就有自定义型的情况了,比如同样一个数:3.14

(1)31.4e-1   认为是double类型(默认,尾巴很干净)

(2)31.4e-1f或31.4E-1F      认为是float类型(有后缀f/F)

(3)31.4e-1l或31.4E-1L      认为是long double类型(有后缀l/L,建议写L,字体上容易与1区分)

所以当你并不需要double那么长的存储空间,内存敏感的情况下只能接受float的长度时

还是有方法让浮点常量是float类型的(31.4E-1F)

4、浮点数打印格式

float和double在printf()函数中可用%f格式说明符,也可以使用%e格式

区别在于%f是原本的数字形式输出(670.000000),%e是指数计数法形式输出(6.7e8)

long double类型用%Lf和%Le格式说明符

(注:在支持C99的十六进制格式浮点数的系统中,还可以用a/A代替e/E,即%a和%La)

——参考《C Primer Plus第五版》

相关文章:

C语言关键字浅析-float

猜你喜欢

转载自blog.csdn.net/Johan_Joe_King/article/details/83956215