数学小Tricks

数学小Tricks

手撕 \(\ln x\)

介绍

可以通过泰勒公式推导出

\[\ln\frac{n+1}n\approx \frac2{2n+1} \]

于是乎我们容易得到

\[\ln n= \left\{\begin{aligned} &\ln\frac n2+\ln2&,2\mid n\\ &\ln\frac{n}{n-1}+\ln(n-1)&,2\nmid n \end{aligned}\right. \]

然后我们只需要记住

\[\ln2\approx0.693 \]

就可以不断递归,对于一个数 \(x\) 我们至多迭代 \(\log_2x\) 次就可以得到近似值

举例

以求 \(\ln46\) 的近似值为例

\[\begin{aligned} \ln46 &=\ln23+\ln2\\ &=\ln\frac{23}{22}+\ln22+\ln2\\ &=\ln\frac{23}{22}+\ln11+2\ln2\\ &=\ln\frac{23}{22}+\ln\frac{11}{10}+\ln10+2\ln2\\ &=\ln\frac{23}{22}+\ln\frac{11}{10}+\ln5+3\ln2\\ &=\ln\frac{23}{22}+\ln\frac{11}{10}+\ln\frac54+\ln4+3\ln2\\ &=\ln\frac{23}{22}+\ln\frac{11}{10}+\ln\frac54+5\ln2\\ &\approx\frac2{22\times2+1}+\frac2{10\times2+1}+\frac2{4\times2+1}+5\ln2\\ &=\frac2{45}+\frac2{21}+\frac29+5\ln2\\ &\approx0.044+0.095+0.222+5\times0.693\\ &=3.826 \end{aligned} \]

那么这准确吗?我们用计算器按一下

\[\ln46\approx3.828641396489095 \]

误差仅有 \(0.0026\) 左右,已经完全足够了

手撕 \(\sqrt x\)

介绍

首先我们可以通过大眼观察法很容易地得到 \(\lfloor\sqrt x\rfloor\),如果 \(x\) 是完全平方数就不用算了,如果不是,就有

\[\lfloor\sqrt x\rfloor<\sqrt x<\lfloor\sqrt x\rfloor+1 \]

换个元,让 \(t=\lfloor\sqrt x\rfloor\)

\[\begin{aligned} \because t<\sqrt x<t+1\\ \therefore 0<\sqrt x-t<1\\ \end{aligned} \]

平方一下

\[0<x+t^2-2t\sqrt x<1 \]

整理得

\[\frac{x+t^2-1}{2t}<\sqrt x<\frac{x+t^2}{2t} \]

这里我们就可以得到一个近似 \(\sqrt x\) 的分数了,如果还要更接近的分数,可以同时减去 \(\frac{x+t^2-1}{2t}\),然后就有

\[0<\sqrt x-\frac{x+t^2-1}{2t}<\frac1{2t} \]

再平方重复上述过程就可以做到不断提高精度,不过这种做法收敛速度极快,一次迭代的精度足以满足大多需求

举例

以计算 \(\sqrt{46}\) 为例

\[6<\sqrt{46}<7 \]

所以

\[0<\sqrt{46}-6<1 \]

平方

\[0<82-12\sqrt{46}<1 \]

整理一下

\[\frac{81}{12}<\sqrt{46}<\frac{41}{6} \]

\[6.75<\sqrt{46}<6.83 \]

已经差不多够用了,如果还要更高精度就减掉 \(\frac{81}{12}\),再重复一次上面的操作就可以得到更高的精度


该文为本人原创,转载请注明出处

博客园传送门

posted @ 2022-06-03 14:10  人形魔芋  阅读(96)  评论(0编辑  收藏  举报