我曾在不同的程序中看到过使用
Log10(x)
和Log(x)/Log(10)
来计算以10为底的对数。有没有什么关于它们实现的东西,使得取两个自然对数比取一个以10为底的对数更具性能或等效?如果所需的底在编译时已知,则第二个方法似乎是浪费的。Log10(x)
和Log(x)/Log(10)
来计算以10为底的对数。有没有什么关于它们实现的东西,使得取两个自然对数比取一个以10为底的对数更具性能或等效?如果所需的底在编译时已知,则第二个方法似乎是浪费的。log10
,它实际上调用了一个本地函数(即它不是在Java中实现的--参见StrictMath.log10
)。log(x)/log(10)
可能被那些不知道log10
的人使用。你几乎肯定不会注意到这两种变体之间的性能差异。
log10(x)
清楚地传达了你的意图,而log(x)/log(10)
则不够清晰,不能明确你真正想要的是以10为底的对数。Math#log(double d)
的[源代码](http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/Math.java),这是[StrictMath#log](http://hg. openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/lang/StrictMath.java)的源代码。我正在搜索它们以提供答案。 - Luiggi Mendoza
Log10(x)
可能是function Log10(int x) { return Log(x) / Log(10); }
。 - ZymusMath.log10(x)
了。它可以使代码更加清晰简洁。无论如何,微小的优化并不值得。 - PeterMmmlog
和log10
两种方法都调用本地方法。 - Luiggi Mendozalog(x)
似乎比log10(x)
快一点;log10(x)
比log(x)/const
快一点。 - ZhongYu