在十进制(基数为10)中,1/3
只能近似为0.33333重复。
二进制中的等价数是多少,只能表示为近似值?
答案 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中可表示哪些数字,而是在某些固定浮点类型中可表示哪些数字,例如float
或double
。这是一个更微妙的问题;任何不是二元理性的数字都无法表示,但并非所有二元理性都可以表示。
答案 6 :(得分:0)
在python 2.4中:
>>> 1.0 / 5.0
0.20000000000000001
这表明基数2很难准确地表示它。
答案 7 :(得分:0)
二进制(.00011001100110011 ...)==十进制(.1)
答案 8 :(得分:-2)
我要去无限穿刺
答案 9 :(得分:-2)
无法用基数10精确表示的同一组数字不能完全用基数2表示。那里应该没有区别。