Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否有log1p函数的快速实现?_Java_Math - Fatal编程技术网

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算法”之外的其他信息 它来自《死亡侦察:无需

我想要一个用于Java的快速log1p函数。Java有Math.log1p,但它显然太慢了,无法满足我的需要

我在这里找到了log1p的代码:

对于围棋语言

它与Java中的相同,还是更快?(假设我把它翻译成java)。 有人知道log1p的其他快速实现吗

谢谢。

既然
log1p(x)=Math.log(x+1)
,找到一个自然的对数快速算法就足够满足您的需要了

Java中的快速自然对数

我在这里找到了以下近似值,没有太多 除了被称为“Borchardt算法”之外的其他信息 它来自《死亡侦察:无需计算》一书 文书”。近似值不是很好(有些人可能会说非常好) 糟糕…,值越大,情况就越糟。但是近似值 也是一个单调的,缓慢递增的函数,这就足够了 对于我的用例

公共静态双日志(双x){ 返回6*(x-1)/(x+1+4*(Math.sqrt(x));}

此近似值比Math.log()快11.7倍

见网站。而且


<>但是,您<>Eng/St>可能链接到C++编译的东西,详细说明。

您缺少了Log1P的要点。当x非常小(例如1e-20)时,
x+1.0
四舍五入到
1.0
,因为
double
的精度有限,
log(1.0)
返回
0
的(错误)结果。您可能会认为“这很接近于0”,但如果下一步是将结果乘以一个非常大的数字呢?当x非常小时,则记录(x+1)~x(请参阅),如果x的值小于某个阈值,则可以通过if语句处理。@AndreHolzner:可以这样处理,但不是很好。无论输入是什么,高质量的实现都将精确到几个低阶位以内。使用您的方法,根据您选择的阈值,您将获得差的结果,或者低于阈值,或者高于阈值,或者两者兼而有之。在这个问题中,有几个很好的简短方法,以日志的形式实现: