为了账号安全,请及时绑定邮箱和手机立即绑定

为什么小数不能精确地用二进制表示?

为什么小数不能精确地用二进制表示?

为什么小数不能精确地用二进制表示?有几个关于浮点表示法的问题贴在了上面。例如,小数0.1没有精确的二进制表示,因此使用=运算符将其与另一个浮点数进行比较是危险的。我理解浮点表示法背后的原则。我不明白的是,为什么从数学的角度来看,小数点右边的数字比左边的数字更“特殊”呢?例如,数字61.0具有精确的二进制表示,因为任何数字的整数部分总是精确的。但数字6.10并不准确。我所做的只是把小数点移了一个位置,然后我突然从Exactopia移到了Indextville。从数学上讲,这两个数字之间应该没有本质上的区别-它们只是数字。相反,如果我将小数点移到另一个方向产生610,我仍然在Exactopia。我可以继续往那个方向走(6100,610000000,610000000000000),它们仍然是精确的,精确的。但一旦小数点跨过某个阈值,数字就不再准确。到底怎么回事?编辑:为了澄清,我想远离讨论行业标准的表示,如ieee,并坚持我认为是数学上“纯”的方式。在基数10中,位置值是:... 1000  100   10    1   1/10  1/100 ...在二进制文件中,它们将是:... 8    4    2    1    1/2  1/4  1/8 ...对这些数字也没有任意的限制。位置无限期地向左和向右增加。
查看完整描述

3 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

不精确的原因是数基的性质。在基数10中,不能准确地表示1/3。变成0.333.。然而,在基3中,1/3精确地表示为0.1,1/2是无限重复的十进制(tresimal?)。可以有限表示的值取决于基的唯一素数,因此基30[2*3*5]可以表示比基2或基10更多的分数。基础210更多[2*3*5*7]。

这是一个与“浮点错误”不同的问题。不准确是因为几十亿的数值分布在更大的范围内。因此,如果您有23位表示此意义,则只能表示约830万个不同的值。然后,8位指数提供了256个选项来分配这些值.这个方案允许在0附近出现最精确的小数,所以你可以差不多了代表0.1。


查看完整回答
反对 回复 2019-05-30
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

例如,数字61.0具有精确的二进制表示,因为任何数字的整数部分总是精确的。但数字6.10并不准确。我所做的只是把小数点移了一个位置,然后我突然从Exactopia移到了Indextville。从数学上讲,这两个数字之间应该没有本质上的区别-它们只是数字。.

让我们暂时离开基数10和2的细节。我们来问问基地b,哪些数字有终止表示,哪些数字没有?片刻的思考告诉我们一个数字x终止b-当且仅当存在整数时表示n使.x b^n是个整数。

例如,x = 11/500有一个终止的10-表示,因为我们可以选择n = 3然后x b^n = 22,一个整数。不过x = 1/3不会,因为不管n我们选择我们将无法摆脱3。

第二个例子促使我们考虑因素,我们可以看到理性 x = p/q(假设是最低的),我们可以通过比较bq。如果q是否有任何素因子不在素因式分解中?b,我们永远找不到合适的n消除这些因素。

因此,对于基础10,任何 p/q哪里q具有除2或5以外的素数因子将不会有终止表示。

现在回到基数10和2,我们看到任何带有终止的10-表示的Rational都是形式的。p/q准确时间q只有2S和5在它的素数分解中,这个数将有一个终止的2-表示,正好在什么时候。q只有2在它的主要保理中。

但其中一种情况是另一种情况的子集!什么时候都行

q只有2S在它的素因式分解中

显然是真说

q只有2S和5S在它的素因式分解中

或者,换句话说,什么时候都行p/q有一个终止的2-表示法,p/q有一个终止的10-表示。相反,等等-任何时候q在它的素因式分解中有一个5,它将有一个终止的10-表示,但是终止的2-表示法这是0.1其他答案提到的例子。

所以我们得到了你问题的答案-因为2的素数是10的素数的子集,所以所有的2-终止数都是10-终止数,反之亦然。不是61对6.1,而是10对2。

作为结束语,如果有些古怪的人使用(比方说)基数17,而我们的计算机使用的是基数5,那么你的直觉就不会被这误导(非零,非整数)在这两种情况下终止的数字!


查看完整回答
反对 回复 2019-05-30
  • 3 回答
  • 0 关注
  • 2184 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信