编程之美-2.6-精确表达浮点数

1. 简述

    简单的说就是将有限循环小数和无限循环小数转化为分数形式。比如:
    0.9 = 9/10
    0.333(3) = 1/3,其中括号表示循环节。

2. 思路

    书上的方法就是分情况讨论。

    首先是有限循环小数,比如123.456,整数部分123不用说了,主要是小数部分0.456,直接转化为456/1000,然后消去最大公因子即可。

    其次是无限循环小数,比如123.4(56),整数部分123同样不用解决,主要是循环小数部分0.4(56),首先把小数部分拆为非循环和循环两个部分,注意非循环部分比如在循环部分之前(这个很显然),即0.4 + 0.0(56),其中非循环部分0.4直接转化为4/10,0.0(56)的处理需要递推公式消减一下:0.0(56)*100 = 5.6(56) = 5.6 + 0.0(56), 0.0(56) = 5.6 / 99 = 56 / 990。推导循环节的过程,主要就是将循环节乘上循环节的位数,即对于(56),乘100,对于(456)乘1000,乘后,等式两边的循环节部分就能够因式分解了,提出循环节,并且计算之。

    基本上就是这样了,关于最大公因子的求解,下一节,也就是2.7节就是讨论这个问题。一般简单的话,辗转相除法就行。 

3. 代码

    省略了。

4. 参考

    编程之美,2.6节,精确表达浮点数。

posted @ 2011-09-25 17:21  xiaodongrush  阅读(356)  评论(0编辑  收藏  举报