怎么解释:在Turbo C中单精度型占4个字节(32位)内存空间,其数值范围为什么是3.4E-38~3.4E+38??

ttfish 2005-09-06 09:16:27
如题,我没有搞懂,那个3.4是怎么来的?
...全文
589 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bugebear3 2005-09-08
  • 打赏
  • 举报
回复
MARK
  • 打赏
  • 举报
回复
因为32-bit单精度浮点数:
1bit符号位,8-bit阶码(1bit符号位、7-bit有效位),23位尾数。
尾数规格化为1.xxxxx,这个1就不包括在尾数中了。
所以表示的数范围就是(+-)1.9999999 * 2 ** (+-)127。
晨星 2005-09-06
  • 打赏
  • 举报
回复
呵呵,你上网查查吧,偶手边也没有。
当然,并不是所有的CPU都采用IEEE的浮点数格式标准。
ttfish 2005-09-06
  • 打赏
  • 举报
回复
steedhorse(晨星)所言极是,
我正是要知道这个浮点数格式标准,才好理解他。
晨星 2005-09-06
  • 打赏
  • 举报
回复
一个float所占的32bit被分成好几个部分,至少会有4个部分,分别表示底数符号,底数,指数符号和指数。
至于为什么是3.4,不是3.5或者3.3,只能查阅详细的浮点数格式标准了。
ttfish 2005-09-06
  • 打赏
  • 举报
回复
一个int数据占16位,unsigned int的16位中没有符号位,所以范围是0~1111111111111111(2进制),就是0~65535,其他实型数据的范围也是这样很好理解。
书上说一个float占4个字节,范围是3.4E-38~3.4E+38,精度7位,这个肯定和2进制浮点表示有关,但是为什么是3.4E-38~3.4E+38呢?这个3.4怎么来到呢?
晨星 2005-09-06
  • 打赏
  • 举报
回复
如果你真想知道具体的“3.4”和“38”是怎么来的,为什么不是3.5和39,就好好研究研究IEEE的浮点数格式标准。
如果你只是想知道为什么32bit能表示那么大,那么你只需要知道浮点数是牺牲了精度来换取表示范围就可以了。你别看它能够表示那么大,却只有6位有效数字是精准的(我是说化成10进制之后)。而同样的32bit整数,虽然化成10进制后,只能表示到正负21亿左右,不到10的10次方,也就是10位数字,但每一位却都是精准无误的。

为了说明这个道理,我们可以举个类似的例子,如果你让我写出一个10的1000亿次方左右的数字,只要你不要求精度,那么很简单,我可以随便写一个,使用科学表示法:
1.23456 E 100000000000
而如果你说:“不行!不能牺牲精度,必须准确的写出每一位。”那恐怕我这这辈子也写不出这么个大数来(除了一些寿星,人一生也就能活40亿秒吧)。
这就是精度和范围的折衷。
snowbirdfly 2005-09-06
  • 打赏
  • 举报
回复
查一下msdn里面有介绍~
Type Name Bytes Other Names Range of Values
float 4 none 3.4E +/- 38 (7 digits)
但是为什么就不大清楚了~~`
xiaocai0001 2005-09-06
  • 打赏
  • 举报
回复
不知道楼主这段话从哪看来的
我也想看看。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧