Java实现 log 2 ( ) \log_2() log2()函数
在编译大作业的乘除优化中,我参考了一篇paper里用到了
log
2
x
\log_2x
log2x这一函数,但在复现的时候误用了Java中自带的Math.log()
函数(该函数实现的是
ln
x
\ln x
lnx的功能),导致优化时出现了偏差,影响了结果,因此在这里讨论实现Java中的
log
2
x
\log_2x
log2x函数
在数学中,有一个换底公式,如下:
log
a
b
=
ln
b
ln
a
\log_ab = \frac{\ln b}{\ln a}
logab=lnalnb
而Java中自带Math.log()
方法和Math.log10()
方法,可以有助我们实现
log
2
x
\log_2 x
log2x这一函数,转换步骤如下:
log
2
x
=
ln
x
ln
2
\log_2x = \frac{\ln x}{\ln 2}
log2x=ln2lnx
因此,我们只需要对最后的结果除以
ln
2
\ln 2
ln2就行
本题代码如下:
public double log2x(double x) {
return Math.log(x) / Math.log(2);
}
不光是 log 2 x \log_2x log2x,本题可以推导至所有的 log m x \log_mx logmx的形式