为什么所有的浮点数都可以用十进制表示?



众所周知,并非所有十进制数都可以用二进制浮点数准确表示。

但是,似乎所有二进制浮点数都可以使用十进制表示法精确表示。

当反之则不成立时,为什么没有任何浮点数不能用十进制表示?这似乎有些不对称。

二进制浮点格式将数字表示为 ±M•2 e,其中M是指定边界内的整数e是指定边界内的整数指数。(也可以定义表示,其中M是定点数而不是整数。这些在数学上是等价的,对边界进行了适当的调整。

十进制数字相当于 ±M•10e(当然,通常对于其他一些Me)。例如,3.4 相当于 +34•10−1

对于 ±M•10 e 形式的任何十进制数字,我们可以重写它:±M•10e = ±M•(5•2)e = ±M•(5 e•2 e) = ±(M•5 e)•2e。现在,如果M•5e是边界内的整数,则这是二进制浮点表示。但是,如果M•5e不是整数,就像 34•5−1一样,则无法使其成为整数。此数字不能以二进制浮点格式表示。

相反,考虑一个二进制浮点数 ±M•2e。如果e是非负数,它是一个整数,所以这已经是十进制数字形式;它是一个整数乘以 100。如果 e 为负数,我们可以重写它:±M•2 e = ±M•2 e•5 e•5−e = ±M•10 e•5−e = ±(M•5e)•10e然后,由于 e 为负,M•5−e 是一个整数,因此 ±(M•5e)•10e是整数乘以 10 的幂的十进制形式

换句话说,我们可以通过将任何还不是整数的二进制浮点数乘以 10 直到我们得到一个整数来将其转换为整数。这是因为 2 是 10 的因数,因此每次乘以 10 都会抵消浮点表示中 2 的负幂之一。

相反,给定一个不是整数的十进制数字,例如 .1,我们不能总是将其变成整数,因为乘以 2 不会抵消其中 5 的负幂。

只是另一种看待它的方式


二进制浮点数具有单独的二进制数字,其值如下:

...
2 4 = 16.0
2 3 = 8.0
2 2 = 4.0
2 1 = 2.0
2 0 = 1.0
2-1 = 0.5
2-2 = 0.25
2-3 = 0.125

2-4=0.0625
...

然后很容易看出,大 + 2 的幂是十进制的精确表示值,以及大 - 2 的幂。

由于所有二进制浮点数都是其位数的总和,因此所有二进制 FP 的十进制值很简单,即上述可表示的十进制值的总和。


Base 10 数字(我们写的像"123.456")并不总是可以用浮点二进制表示,因为像 0.1、0.01、0.001,m 等各个数字缺乏精确的有限二进制 FP 表示。

10-1= 0.00011001100110011...阿拉伯数字

相关内容

  • 没有找到相关文章

最新更新