编程之美-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节,精确表达浮点数。