在编译大作业的乘除优化中,我参考了一篇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的形式
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)