小朋友学C语言(4):单精度浮点数与双精度浮点数

网友投稿 231 2022-12-01

小朋友学C语言(4):单精度浮点数与双精度浮点数

简单介绍了浮点数。计算机程序中的浮点数分为单精度浮点数和双精度浮点数。

单精度和双精度精确的范围不一样。

计算机里的最基本的存储单位用位(bit)来表示。bit只能用来存储0或1。 稍大一点的单位是字节(Byte,简写为B)。 再大一级的是千字节(kilo Bytes),用k来表示。 再大一级的单位是兆字节(Mega Bytes),用M来表示。一张照片的大小通常为1~3M。 再大一级的单位为G。一部高清电影的大小通常为1~2G。 再大一级的单位为T。

换算关系为:

1B = 8bit1k = 1024B = 2^101M = 1024k = 2^201G = 1024M = 2^301T = 1024G = 2^40

单精度(float)在计算机中存储占用4字节,32位,有效位数为7位(6位小数+小数点)。 双精度(double)在计算机中存储占用8字节,64位,有效位数为16位(15位小数+小数点)。 不管是float还是double,在计算机中的存储都遵循IEEE规范,使用二进制科学计数法,都包含三个部分:符号位、指数位和尾数部分。其中float的符号位、指数位(即整数部分)、尾数部分分别为1, 8, 23。双精度则分别为1, 11, 52。

精度主要取决于尾数部分的位数,float为23位,最小为2的-23次方,约等于1.19乘以10的-7次方,所以float小数部分只能精确到后面6位,加上小数点算做一位,即有效数字为7位。 类似,double 尾数部分52位,最小为2的-52次方,约为2.22乘以10的-16次方,所以精确到小数点后15位,有效位数为16位。

程序验证:

#include int main(){ float a = 1.123456789; printf("a = %20.9f\n", a); double b = 2.123456789; printf("b = %20.9f\n", b); return 0;}

注意:这里%20.9f表示浮点数总共有20位,其中小数占9位。不足20位的部分,左侧用空格来填充。

运行结果:

a = 1.123456836b = 2.123456789

从运行结果可以看出,单精度浮点数小数部分只有前6位是准确的,后三位是不准确的。双精度小数部分9位都是准确的。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java中Mybatis,SpringMVC,Spring的介绍及联系
下一篇:小朋友学C语言(13):逻辑运算符
相关文章

 发表评论

暂时没有评论,来抢沙发吧~