2.6 精确表达浮点数
作者:互联网
2.6 精确表达浮点数
基本问题:在计算机中,一般使用float和double来表示浮点数,但是由于计算机本身硬件的限制,不能够很准确的表示小数,为了得到精确的结果,用分数来表示小数,如果一个小数是无限小数,我们假设它是无限循环小数。
解法
经题目可得,我们输入的数字主要有两种
- 一种是有限小数
然后再对分子分母进行最大公约数化简即可gcd
- 一种是无限循环小数
其中\((b_1b_2...b_m)\)是循环体
\[X = 0.a_1a_2...a_n(b_1b_2...b_m) \]\[10^n * X = a_1a_2...a_n.b_1b_2...b_m \]\[10^n * X = a_1a_2...a_n + 0.b_1b_2...b_m \]\[X = frac{a_1a_2...a_n + 0.b_1b_2...b_m}{10^n} \]再看循环体
\[Y = 0.b_1b_2...b_m \]\[10^m * Y = b_1b_2...b_m.b_1b_2...b_m \]\[10^m *Y - Y = b_1b_2...b_m \]\[Y = \frac{b_1b_2...b_m}{10^m-1} \]将上式带入X的表达式中得
\[X = \frac{a_1a_2...a_n}{10^n} + \frac{b_1b_2...b_m}{10^n*(10^m - 1)} \]标签:...,frac,10,浮点数,1a,1b,精确,2.6 来源: https://www.cnblogs.com/botak/p/14023484.html