数学小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}\),再重复一次上面的操作就可以得到更高的精度
该文为本人原创,转载请注明出处