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

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

有几个关于浮点表示法的问题贴在了上面。例如,小数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 ...

对这些数字也没有任意的限制。位置无限期地向左和向右增加。


红颜莎娜
浏览 2433回答 3
3回答

Cats萌萌

不精确的原因是数基的性质。在基数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。

婷婷同学_

例如,数字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(假设是最低的),我们可以通过比较b和q。如果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,那么你的直觉就不会被这误导否(非零,非整数)在这两种情况下终止的数字!
打开App,查看更多内容
随时随地看视频慕课网APP