双精度改单精度c语言程序,C语言菜鸟基础教程之单精度浮点数与双精度浮点数...

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

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

计算机里的最基本的存储单位用位(bit)来表示。bit只能用来存储0或1。

稍大一点的单位是字节(Byte,简写为B)。

再大一级的是千字节(kilo Bytes),用k来表示。

再大一级的单位是兆字节(Mega Bytes),用M来表示。一张照片的大小通常为1~3M。

再大一级的单位为G。一部高清电影的大小通常为1~2G。

再大一级的单位为T。

换算关系为:

1B = 8bit

1k = 1024B = 2^10 B

1M = 1024k = 2^20 B

1G = 1024M = 2^30 B

1T = 1024G = 2^40 B

单精度(float)在计算机中存储占用4字节,32位,有效位数为7位(6位小数+小数点)。

双精度(double)在计算机中存储占用8字节,64位,有效位数为16位(15位小数+小数点)。

不管是float还是double,在计算机中的存储都遵循IEEE规范,使用二进制科学计数法,都包含三个部分:符号位、指数位和尾数部分。其中float的符号位、指数位(即整数部分)、尾数部分分别为1, 8, 23。双精度则分别为1, 11, 52。

13999e901fe136bfe619bbf49e583aa8.png

float

9aeeae867ea6f309a012870580d2bccd.png

double

精度主要取决于尾数部分的位数,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.123456836

b = 2.123456789

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值