1个回答
推荐于2017-11-26
展开全部
这是一个数据存储方式的问题
一个float型实数在内存中占4个字节,即32个二进制bit,从低位到高位依次叫第0位到第31位.这32位可以分为3个部分:符号位(第31位),阶码(第30位到第23位共8位),尾数(最低23位)。
1、符号位。最高位也就是第31位表示这个实数是正数还是负数,为0表示正数或0,为1表示负数.
2、阶码。第30位到第23位这8个二进制位表示该实数转化为规格化的二进制实数后的指数与127(127即所谓偏移量)之和即所谓阶码.
规格化的二进制实数的指数只能在-127----+127之间,所以,一个float型数的最大值在+2^127即+3.4*10^38,最小值在-2^127即-3.4*10^38.
3、尾数。其他最低的23位即第22位到第0位表示该实数转化为规格化的二进制实数后小数点以后的其余各位即所谓尾数.
Double的计算与此类似,double的符号位为63位,指数为62~52位,共11位。表示的范围为-1024~1023。尾数为51~0。表示的范围为-1.7*10^308~+1.7*10^308
根据他们的存储原理可知,虽然double存储范围很大,但精确度却并不高
因为他是用科学计数法来表示的,类似1.2 * 10 ^ -38 ----- 3.5 * 10 ^38,
而精确度表示的是能精确表示的位数,一般指有效数字,如:1.2 * 10 ^ -38
虽然数很大,但精确度只有两位有效数字
所以,两个double数尽量不要做“==”逻辑判断,可能会产生BUG
一个float型实数在内存中占4个字节,即32个二进制bit,从低位到高位依次叫第0位到第31位.这32位可以分为3个部分:符号位(第31位),阶码(第30位到第23位共8位),尾数(最低23位)。
1、符号位。最高位也就是第31位表示这个实数是正数还是负数,为0表示正数或0,为1表示负数.
2、阶码。第30位到第23位这8个二进制位表示该实数转化为规格化的二进制实数后的指数与127(127即所谓偏移量)之和即所谓阶码.
规格化的二进制实数的指数只能在-127----+127之间,所以,一个float型数的最大值在+2^127即+3.4*10^38,最小值在-2^127即-3.4*10^38.
3、尾数。其他最低的23位即第22位到第0位表示该实数转化为规格化的二进制实数后小数点以后的其余各位即所谓尾数.
Double的计算与此类似,double的符号位为63位,指数为62~52位,共11位。表示的范围为-1024~1023。尾数为51~0。表示的范围为-1.7*10^308~+1.7*10^308
根据他们的存储原理可知,虽然double存储范围很大,但精确度却并不高
因为他是用科学计数法来表示的,类似1.2 * 10 ^ -38 ----- 3.5 * 10 ^38,
而精确度表示的是能精确表示的位数,一般指有效数字,如:1.2 * 10 ^ -38
虽然数很大,但精确度只有两位有效数字
所以,两个double数尽量不要做“==”逻辑判断,可能会产生BUG
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询