float的数值范围与小数位精度

1 篇文章 0 订阅
1 篇文章 0 订阅
float a;
a=1023.00006103515625;//整数部分2^10-1,小数部分2^-14
//a=2047.0001220703125;//整数部分2^11-1,小数部分2^-13
//a=4095.000244140625;//整数部分2^12-1,小数部分2^-12
//a=8191.00048828125;//整数部分2^13-1,小数部分2^-11
//a=16383.0009765625;//整数部分2^14-1,小数部分2^-10
//a=32767.00153125;//整数部分2^15-1,小数部分2^-9
//a=65535.00390625;//整数部分2^16-1,小数部分2^-8
//a=131071.0078125;//整数部分2^17-1,小数部分2^-7
//a=262143.015625;//整数部分2^18-1,小数部分2^-6
//a=524287.03125;//整数部分2^19-1,小数部分2^-5
//a=1046575.0625;//整数部分2^20-1,小数部分2^-4
//a=2097151.125;//整数部分2^21-1,小数部分2^-3
//a=4194303.75;//整数部分2^22-1,小数部分2^-2
//a=-8388607.5;//整数部分2^23-1,小数部分2^-1
a=3.4028234692093846346337460743176E+38;//整数部分2^128
printf("%.16fn",a);//若上面的float整数部分+1,则显示时将忽略小数部分,将损失小数精度

//如上,float的整数范围与小数精度相关,原因就是float的存储方式:
//32位双字存储:首位为符号位S,0为正1为负;后8位为指数E,底数为2;最后23位为尾数M
//            Address+0    Address+1    Address+2    Address+3
//Contents    SEEE EEEE    EMMM MMMM    MMMM MMMM    MMMM MMMM
//其数值大小即为X=((-1)^S)*M*(2^E)
//因此有小数部分时,float的整数二进制位与小数二进制位和为23;
//没有小数部分时,float的整数范围可达到2^128即3.4028236692093846346337460743177e+38
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值