Java 是否有log1p函数的快速实现?
我想要一个用于Java的快速log1p函数。Java有Math.log1p,但它显然太慢了,无法满足我的需要 我在这里找到了log1p的代码: 对于围棋语言 它与Java中的相同,还是更快?(假设我把它翻译成java)。 有人知道log1p的其他快速实现吗 谢谢。既然Java 是否有log1p函数的快速实现?,java,math,Java,Math,我想要一个用于Java的快速log1p函数。Java有Math.log1p,但它显然太慢了,无法满足我的需要 我在这里找到了log1p的代码: 对于围棋语言 它与Java中的相同,还是更快?(假设我把它翻译成java)。 有人知道log1p的其他快速实现吗 谢谢。既然log1p(x)=Math.log(x+1),找到一个自然的对数快速算法就足够满足您的需要了 Java中的快速自然对数 我在这里找到了以下近似值,没有太多 除了被称为“Borchardt算法”之外的其他信息 它来自《死亡侦察:无需
log1p(x)=Math.log(x+1)
,找到一个自然的对数快速算法就足够满足您的需要了
Java中的快速自然对数
我在这里找到了以下近似值,没有太多
除了被称为“Borchardt算法”之外的其他信息
它来自《死亡侦察:无需计算》一书
文书”。近似值不是很好(有些人可能会说非常好)
糟糕…,值越大,情况就越糟。但是近似值
也是一个单调的,缓慢递增的函数,这就足够了
对于我的用例
公共静态双日志(双x){
返回6*(x-1)/(x+1+4*(Math.sqrt(x));}
此近似值比Math.log()快11.7倍
见网站。而且
<>但是,您<
x+1.0
四舍五入到1.0
,因为double
的精度有限,log(1.0)
返回0
的(错误)结果。您可能会认为“这很接近于0”,但如果下一步是将结果乘以一个非常大的数字呢?当x非常小时,则记录(x+1)~x(请参阅),如果x的值小于某个阈值,则可以通过if语句处理。@AndreHolzner:可以这样处理,但不是很好。无论输入是什么,高质量的实现都将精确到几个低阶位以内。使用您的方法,根据您选择的阈值,您将获得差的结果,或者低于阈值,或者高于阈值,或者两者兼而有之。在这个问题中,有几个很好的简短方法,以日志的形式实现: