Language agnostic 计算小x(偶尔大x)的ln(1-x)的好算法

Language agnostic 计算小x(偶尔大x)的ln(1-x)的好算法,language-agnostic,numerical-stability,Language Agnostic,Numerical Stability,我在寻找一个算法来计算ln(1-x)。x通常很小(取决于您想要的精度,-x是小ln(1-x)的一个很好的近似值 编辑:如果需要该算法的原因是为了获得最佳精度,那么有许多库专门用于log(1+x)。例如,在Python使用中。与中相同。如果使用MATLAB,则log1p()函数是专为计算ln(1+x)而设计的对于较小的x值。可以接受的误差大小是多少?以及x可以有多大?精度非常重要,这是我不想使用库的原因,因为根据log(1.0-x),我会立即失去精度。但是算法不应该比使用log(1.0-x)慢几个

我在寻找一个算法来计算ln(1-x)。x通常很小(取决于您想要的精度,
-x
是小
ln(1-x)
的一个很好的近似值


编辑:如果需要该算法的原因是为了获得最佳精度,那么有许多库专门用于
log(1+x)
。例如,在Python使用中。与中相同。

如果使用MATLAB,则log1p()函数是专为计算ln(1+x)而设计的对于较小的x值。

可以接受的误差大小是多少?以及
x
可以有多大?精度非常重要,这是我不想使用库的原因,因为根据log(1.0-x),我会立即失去精度。但是算法不应该比使用log(1.0-x)慢几个数量级最后,在某些情况下,x可能接近1.0,但我当然可以用单独的算法来处理。许多库中都有专门的函数,请参见我编辑的答案。对于
x
任意接近1.0的情况,您可以查看常规
log
函数,结果是
-1/log(1/(1-x))
任意大。您提供的链接不包含算法。我发现其中一个使用log1p作为搜索词:does,但is具有浮点精度。它们不包含算法,但我所知道的每种编程语言都可以以某种方式使用C库。此外,您找到的示例具有
float64
精度,我认为s IEEE双精度。您能告诉我们您可以接受的错误是什么以及为什么不想使用可用的库吗?根据您的需要,这里可能有人可以提供帮助。啊,我知道float64与double相似/等于double。那么算法可能就够了。我允许的错误大约是10^{-9}.问题中没有说明他们在使用MATLAB,所以你的答案没有用。