double占8字节 一个数字占1字节 为什么能精确16位 我觉得只有8位,,,

8个字节放8个数这么想哪里错了... 8个字节放8个数 这么想哪里错了 展开
 我来答
匿名用户
推荐于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
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式