我想为Java提供一个快速的log1p函数。 Java具有Math.log1p,但对于我的需求而言显然太慢了。
我在这里找到了log1p的代码:
http://golang.org/src/pkg/math/log1p.go
用于GO语言。
它与Java中的一样吗?还是速度更快? (假设我将其翻译为Java)。
任何人都知道log1p的其他一些快速实现吗?
谢谢。
最佳答案
自log1p(x) = Math.log(x+1)
以来,找到一个自然的快速日志记录算法即可满足您的需求。
Java中的快速自然对数
我在这里找到了以下近似值,并且没有太多
信息,除了它被称为“Borchardt算法”
摘自《死亡侦查:无计算
仪器”。近似值不是很好(有些人可能会说非常
不好...),值越大越糟。但是近似
也是单调的,缓慢增加的函数,足够好了
对于我的用例。
公共静态double log(double x){
返回6 *(x-1)/(x +1 + 4 *(Math.sqrt(x))); }
该近似值比Math.log()快11.7倍。
请参阅this网站。另外,a performance comparison for math libraries in java.
但是,您的需要的可能是链接到c ++编译的东西,即here。