java 以10为底的对数_求以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}\).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值