求以10为底的数的对数

题目: 求 \(\log_{10}x\)

解法:

因为 \(10^y = x\), 所以 \(y = \log_{10}x\), 那么 \(y\) 为一个实数, 记为
\[y = n + 0.d_1d_2d_3\ldots d_k \ldots\]
即有 \(10^{n + 0.d_1d_2d_3\ldots d_k \ldots} = x\), 其中 \(0 \le d_i \le 9\)。 换一种思路, 因为
\[y = n + \frac{d_1}{10^1} + \frac{d_2}{10^2} + \frac{d_3}{10^3} + \ldots\]
将 \(y\) 的小数部分用二进制小数表示,即
\[\frac{b_1}{2^2} + \frac{b_2}{2^2} + \frac{b_3}{2^3} + \ldots\]
那么 \(0 \le b_i \le 1\), 即 \(b_i\) 只能取 \(0\) 或 \(1\)。那么有
\[\log_{10}x = n + \frac{b_1}{2^1} + \frac{b_2}{2^2} + \frac{b_3}{2^3} + \ldots + \frac{b_k}{2^2} + \ldots, (0 \le b_i \le 1)\]
其中\(n\) 很好求,因为知道 \(10^n \le x < 10^{n + 1}\),所以可以很快地估算出整数 \(n\)。接下来开始求 \(b_i\)。

记 \(x_0 = \frac{x}{10^n}\),那么有
\[
x_0 = \frac{10^{n + \frac{b_1}{2^1} + \frac{b_2}{2^2} + \ldots + \frac{b_k}{2_k} + \ldots}}{10^n} = 10^{\frac{b_1}{2^1} + \frac{b_2}{2^2} + \ldots + \frac{b_k}{2_k} + \ldots}
\]
那么
\[
x_0^2 = (10^{\frac{b_1}{2^1} + \frac{b_2}{2^2} + \ldots + \frac{b_k}{2_k} + \ldots})^2 = 10^{b_1 + \frac{b_2}{2^1} + \frac{b_3}{2^2} + \ldots + \frac{b_k}{2^{k-1}}} = 10^{b_1} \times 10^{\frac{b_2}{2^1} + \frac{b_3}{2^2} + \ldots + \frac{b_k}{2^{k-1}}}
\]
易知
\[1 \le 10^{\frac{b_2}{2^1} + \frac{b_3}{2^2} + \ldots + \frac{b_k}{2^{k-1}}} < 10\]
那么当 \(x_0 < 10\) 时,可以推出 \(b_1 = 0\),并且记 \(x_1 = x_0^2\)。 当 \(x_0 \ge 10\) 时,推出 \(b_1 = 1\),记 \(x_1 = \frac{x_0^2}{10}\)。继而利用 \(x_1^2\)可以求出 \(b_2\)。

总结一下:
\[x_k = 10^{\frac{b_{k+1}}{2} + \frac{b_{k+2}}{2^2} + \ldots}\]
如果 \(x_{k}^2 < 10\), 那么 \(b_{k+1} = 0\), \(x_{k+1} = x_{k}^2\).
如果 \(x_{k}^2 \ge 10\), 那么  \(b_{k+1} = 1\), \(x_{k+1} = \frac{x_{k}^2}{10}\).

posted @ 2013-12-25 10:45  liuzhijiang123  阅读(1129)  评论(0编辑  收藏  举报