职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 2009|回复: 4

C++ double 类型范围为什么那么大

[复制链接]
lynlyn 发表于 2009-8-31 10:50 | 显示全部楼层 |阅读模式
书上说是1.7乘以10的308次方
为什么会这么大?64位能表示的最大不应该是2^64吗?
想退定的人 发表于 2009-8-31 10:50 | 显示全部楼层

C++ double 类型范围为什么那么大

范围与真正范围内数值的个数
是不一样的
小苹果 发表于 2009-8-31 10:50 | 显示全部楼层

C++ double 类型范围为什么那么大

float和double的范围是由指数的位数来决定的

float的指数位有8位
而double的指数位有11位
分布如下:

float:

1bit(符号位)
8bits(指数位)
23bits(尾数位)



double:

1bit(符号位)
11bits(指数位)
52bits(尾数位)



于是
float的指数范围为-128~127
而double的指数范围为-1024~1023
并且指数位是按补码的形式来划分的
其中负指数决定了浮点数所能表达的绝对值最小的数;而正指数决定了浮点数所能表达的绝对值最大的数
也即决定了浮点数的取值范围

float的范围为-2^128 ~ +2^127
也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1023
也即-1.79E+308 ~ +1.79E+308
实话实说 发表于 2009-8-31 10:50 | 显示全部楼层

C++ double 类型范围为什么那么大

它表示大数的代价就是损失了精度.打个比方,我有0-9这10个数,我定义数n表示5n,那么这10个数最大能表示45,但41,42这些不是5的倍数的数就没法精确表示了,只能在定义中把它们靠向40或者45.这就是为了扩大表示范围而损失了表示精度.
dg_gaga 发表于 2009-8-31 10:50 | 显示全部楼层

C++ double 类型范围为什么那么大

因为它不是每个数都能表示
它是分为2大块存放
一块存放有效数字(包括小数点)
一块存放 次方数
这样存放的
不是挨个存放

太精细的数字是显示不了的

double有效数字位数一般在14-16左右
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-20 04:52 , Processed in 0.149297 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表