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
float的数值范围与小数位精度
最新推荐文章于 2022-11-02 14:07:29 发布