如何计算指数积分?

计算科学 浮点 近似 特殊功能
2021-12-06 08:03:42

(我最初是在另一个交流中问这个的。)

我正在编写一个使用素数计数功能的程序。现在,我正在使用x/log(x),但我想切换到更准确的东西。更好的近似值是对数积分函数(实际上是它的欧拉变体),它可以从指数积分中计算出来。现在如何计算指数积分?我在使用 Swift 的 macOS Intel 系统上,因此如果需要帮助,我可以使用 Apple 系统库提供的各种高级浮点函数。

我确实看到了类似的问题,但我使用了不同的域(2 及以上)。

当然,Li(x)只要我可以轻松实现它们,涉及的功能也比可接受的更好。

2个回答

与大多数关于特殊函数计算的问题一样,数学函数数字图书馆是一个很好的起点。特别是,参见第 6 章,其中涉及指数积分和li(x).

你会发现不同的方法(例如小型的幂级数x与大的渐近扩展x) 在不同的范围内工作得最好。

我看到 Swift 有标准的初等函数、贝塞尔函数和 Gamma 函数,但它似乎没有 li 或 Ei。如果我知道 Swift 的特殊函数库,那么我建议您使用它而不是编写自己的例程。

如果您只需要双精度,那么 cephes 中的 ac 实现应该能够相当容易地适应:https ://github.com/jeremybarnes/cephes/blob/60f27df395b8322c2da22c83751a2366b82d50d1/misc/expn.c