还是关于浮点数的问题,0和1之间双精度能表示多少个数!!

善良的小伙伴 2015-07-14 07:48:30
书上原话:

双精度在内存中的组成:


我是这样算的:
首先在0和1之间,那必定是正数,所以第一位(尾数符号位)必须是0;先说尾数部分,尾数总共有52位,隐含一位前导1,就是说比如尾数是567(10进制),那么表示的尾数就是1.567,要让浮点数在0和1之间,指数就必须是-1,或者比-1更小;
总共有2^52种尾数,而8位的指数表示范围为-126~127,其中小于0的有126个,所以0和1之间所有的浮点数的数量为2^52乘以126=2^52*(2^7-2)=2^59-2^53 根本不等于2^53啊,,,我理解错了吗。。。
...全文
692 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2015-07-21
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
我感觉他表达的应该是“双精度最多可以精确表示2^53个小数部分”(不计小数点的移动)。
  • 打赏
  • 举报
回复
楼主说的也有道理,假设限定在[0..1)之间,那么每个规格化尾数(1.x)的-1、-2、-3...次幂都是可以精确表达的,所以就总共有2^52(只考虑>=0部分)*1022个数。 我再研究一下。:)
  • 打赏
  • 举报
回复
怎么写成那样了。 那么每个规格化尾数(1.x)的-1、-2、-3...次幂都是可以精确表达的 ===================================================== 那么每个规格化尾数(1.x)乘以2的-1、-2、-3...次幂都是可以精确表达的
ForestDB 2015-07-16
  • 打赏
  • 举报
回复
精度看尾数即可,与指数没有关系。
善良的小伙伴 2015-07-16
  • 打赏
  • 举报
回复
引用 2 楼 DelphiGuy 的回复:
他说的是“而双精度最多可以精确表示2^53个”,注意是精确表示,这意味着尾数不能有损失,所以指数不能乱移动,指数一移动,尾数的精度就变了。
没看懂,,,为啥精确表示,指数就不能乱移动,能不能举个例子。。
引用 3 楼 adlay 的回复:
根据我小学老师所教的语文,“而双精度最多可以精确表示 2^53 个” 这句话是不受 “假定在 0 和 1 之间” 这个限制的。
好像是这样,,但是就算不受这个限制,也不是2^53个啊,远大于这个结果吧,,
  • 打赏
  • 举报
回复
他说的是“而双精度最多可以精确表示2^53个”,注意是精确表示,这意味着尾数不能有损失,所以指数不能乱移动,指数一移动,尾数的精度就变了。
www_adintr_com 2015-07-15
  • 打赏
  • 举报
回复
根据我小学老师所教的语文,“而双精度最多可以精确表示 2^53 个” 这句话是不受 “假定在 0 和 1 之间” 这个限制的。
善良的小伙伴 2015-07-14
  • 打赏
  • 举报
回复
引用 楼主 cc_mugiwala 的回复:
书上原话: 双精度在内存中的组成: 我是这样算的: 首先在0和1之间,那必定是正数,所以第一位(尾数符号位)必须是0;先说尾数部分,尾数总共有52位,隐含一位前导1,就是说比如尾数是567(10进制),那么表示的尾数就是1.567,要让浮点数在0和1之间,指数就必须是-1,或者比-1更小; 总共有2^52种尾数,而8位的指数表示范围为-126~127,其中小于0的有126个,所以0和1之间所有的浮点数的数量为2^52乘以126=2^52*(2^7-2)=2^59-2^53 根本不等于2^53啊,,,我理解错了吗。。。
上面我写错了一段。。"而8位的指数表示范围为-126~127,其中小于0的有126个,所以0和1之间所有的浮点数的数量为2^52乘以126=2^52*(2^7-2)=2^59-2^53 根本不等于2^53" 应该是: 而11位的指数表示范围为-1022~1023,其中小于0的有1022个,所以0和1之间所有的浮点数的数量 为2^52乘以1022=2^52*(2^10-2)=2^62-2^53根本不等于2^53

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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