2 maoxunxing maoxunxing 于 2014.12.03 22:33 提问

关于C语言浮点的一个练习题

今天看深入理解计算机系统,浮点那一节一个习题。看不明白什么意思。
求指点,谢谢···
题目:
A.假定一个k位指数和n位小数的浮点格式,给出不能准确描述的的最小正整数的公式。
(因为要想准确表示它需要n+1位小数)
B.对于单精度格式(k=8,n=23),这个整数的数字值是多少?
答案:
这个练习帮助你思考什么数是不能准确表示的。
这个数的二进制表示是:1后面跟着n个0,其后再跟1,得到值:2的n+1次方+1。

当n=23时,值是:2的24次方+1=16 777 217

附上答案,便于看懂。

我想了半天,不知道这个题目想要表达什么。。求指点

3个回答

caozhy
caozhy   Ds   Rxr 2014.12.03 22:48

如果二进制你不能理解,我们用十进制来打比方。
让你用 10^k * y的形式来表示一个整数,其中y可表示的范围是0~10^24-1(23位数),那么“不能准确描述的的最小正整数”是多少?显然,0~10^24-1都可以表示,要表示10^24呢,我们就得写10*10^23,因为最后是0,这么写也是精确的。
那么如果是10^24+1呢?是不是不能表示了?
现在仅仅是把十进制换成二进制,道理相同。

u012386619
u012386619   2014.12.03 23:02

我觉得 就是答案中提示的:帮助你思考什么数字是不能表达,
计算机的表达能力是有限的,一般分配4,或8字节为表示一个浮点数,能表达的数字个数是受分配字节大小限制的,不管你是什么浮点数表示方法,而浮点数又是无穷的,那么肯定有些数是无法表达的。

eagleyan
eagleyan   Rxr 2014.12.03 23:51

哈,又看到你发相似的问题,我想我在你另外一个问题里已经做过描述了
这里有几个注意点,1.基于上次回答的问题,指数最大时2 ^ (k - 1)不是 2 ^ k ,当k = 8,就是128. 小数能表达的数时1.0...0(n位) ~1.1...1(n位)。能表示的整数通过* 2 ^ i可以实现
比如1.0101 * 10000(2 ^ 4) = 10101(二进制)
大于11....1(n + 1位,整数位加上n位小数位)的数又重新从1.0...0开始,用乘以2的次幂来表示,这个时候因为* 2,奇数就没办法精确表示了。第一个大于11..1(n+1位的是个偶数),它的值是 2 ^ ( n + 1)次方,下一个奇数就没法精确表示了, 也就是 2 ^ (n + 1) +1
这就得到了你的答案提示的结果

eagleyan
eagleyan 回复maoxunxing: 你觉得我解释清楚了,就采纳我的答案吧
大约 3 年之前 回复
eagleyan
eagleyan 回复maoxunxing: 我不觉得你笨,最初我学习这个东西的时候也耗费了很多时间才理解,浮点数不是那么直观,所以理解起来要费点时间
大约 3 年之前 回复
maoxunxing
maoxunxing ai ,太笨了 没办法。只能多问。。。
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!