数值计算:二进制分数与十进制分数的转化
整数的十进制而二进制的转化比较简单,而且任意一个整数都可以用有限长位数的二进制数来表示,而分数就不一定了。因为整数的最小间隔是1,而分数则可以是无穷小的,所以有时候有限的十进制分数会转化为无限循环的二进制小数
十进制分数转化为二进制分数
二进制的分数可以表示为2的负次幂的和,即假设R是一个正的纯小数,其可以表示为
![827009-20170224110321601-326764487.png](https://i-blog.csdnimg.cn/blog_migrate/81d73a01172aef5f811bc6fa84b7f5c5.png)
![827009-20170224110321929-2015634164.png](https://i-blog.csdnimg.cn/blog_migrate/693cdab8cd9517dc154665a64ddef514.png)
![827009-20170224110322195-1237105180.png](https://i-blog.csdnimg.cn/blog_migrate/ca897dc3ead7e9a3a8e3914740e9174f.png)
为了将转化为分数,我们将(1)两边都乘上2,则有
![827009-20170224110322741-379254703.png](https://i-blog.csdnimg.cn/blog_migrate/c2aabe51b1e5082237f4300d46b17a2d.png)
此时的是
的整数部分,即
,由此可得
,把
的小数部分记为
,则
![827009-20170224110326898-167833349.png](https://i-blog.csdnimg.cn/blog_migrate/381fb1b53b797b5902e0e527f7df989f.png)
同样按照上面的步骤,将(3)两边乘上2,则有
![827009-20170224110327210-1023583830.png](https://i-blog.csdnimg.cn/blog_migrate/19f669d578a365cf62d6fd723b4d908f.png)
则有,同样,将
的小数部分记为
,按照上述的步骤便可依次得到
下面以0.7为例子,将其转化为二进制分数
![]() | ![]() | ![]() |
---|---|---|
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
注意到,即以后的数字都是重复循环的,所以0.7转化为二进制小数位无限循环的,即
二进制分数转化为十进制分数
假如是非无限循环的二进制小数,只需代进(1)式便可以得出其对应的十进制分数,而假如是无限循环的如,我们可以这么做,两边乘上32,则有
![827009-20170224110345507-1926784121.png](https://i-blog.csdnimg.cn/blog_migrate/196f7f0ac659b52325e7d56e0d8c3a0f.png)
然后在将原式两边乘上1024,则有
![827009-20170224110345945-1796643015.png](https://i-blog.csdnimg.cn/blog_migrate/74ad30d004930db7f3f4bf98472bdde9.png)
上面两式相减,有
![827009-20170224110346398-8865901.png](https://i-blog.csdnimg.cn/blog_migrate/91429b36fd7496c0bace7c1ff50becc9.png)
所以可得,其他的循环小数用此方法进行转化。