二进制数中的数字只能表示为近似值?

时间:2009-11-04 15:19:20

标签: math binary discrete-mathematics

在十进制(基数为10)中,1/3只能近似为0.33333重复。

二进制中的等价数是多少,只能表示为近似值?

10 个答案:

答案 0 :(得分:4)

0.1是一个这样的例子,以及0.2

这个问题也类似于this other SO question,它已经有了非常好的答案。

答案 1 :(得分:3)

更好的问题是询问可以以二进制形式准确表示的数字。其他所有东西都只能近似或根本不表示。

请参阅What every computer scientist should know about floating point arithmetic

答案 2 :(得分:2)

嗯,有无数的数字无法用该表示法精确表示,但这里有一个:1/10。

答案 3 :(得分:2)

我假设您的意思是询问哪些有理数可以使用有限表示以二进制表示。我从十进制的1/3的例子中推断出这一点。事实是,如果允许无限表示,每个有理数都可以用二进制表示。但是,如果您只允许有限的表示,那么从计算机科学的角度来看,这个问题才有意思。我进一步假设你没有询问具体的计算机表示(比如IEEE 754),而只是询问一般的位置表示。

p/q的有理数(p, q) = 1可以在基数b中表示为有限表示,当且仅当q的每个素数因子除b时。没有理性的数字在任何基础上都有有限的表示。

特别是,当且仅当p/q的每个素数因子除(p, q) = 1时,具有q的有理数2可以表示为二进制的有限表示。也就是说,唯一具有p/q且{2}具有二进制有限表示的有理数{是(p, q) = 1对于某些非负整数q = 2^k的数字k。而且,所有这些有理数都可以用二进制的有限表示来表示。这些数字称为dyadic rationals

答案 4 :(得分:1)

对于整数k和整数n,每个数不能表示为k / 2 ^ n。

找到所有这些数字的简单方法是写下一些不包括2的素数.3,5,7,11,13,17和19是不包括2的素数的好例子。

开始相乘。 1 / 3,2 / 3,1 / 5,2 / 5,3 / 5,4 / 5,1 / 6,5 / 6,1 / 7,2 / 7等。

如果你这样做 - 并且你避免使用k / 2 ^ n形式的数字 - 你将枚举每个可能无法用二进制精确表示的分数。

当你得到最左边64位全部相同的数字时,你应该停止枚举。

答案 5 :(得分:1)

可以在基数2中准确表示的数字是二元有理数。对于某些整数k和整数n,这些是可以以k / 2 ^ n的形式写入的数字。任何无法以该形式书写的数字都将在基数2中具有非终止表示。

但是,您似乎并未询问基数2中可表示哪些数字,而是在某些固定浮点类型中可表示哪些数字,例如floatdouble。这是一个更微妙的问题;任何不是二元理性的数字都无法表示,但并非所有二元理性都可以表示。

答案 6 :(得分:0)

在python 2.4中:

>>> 1.0 / 5.0
0.20000000000000001

这表明基数2很难准确地表示它。

答案 7 :(得分:0)

二进制(.00011001100110011 ...)==十进制(.1)

答案 8 :(得分:-2)

我要去无限穿刺

答案 9 :(得分:-2)

无法用基数10精确表示的同一组数字不能完全用基数2表示。那里应该没有区别。