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