|Anonymous | Login | Signup for a new account||2020-08-06 00:35 MSK|
|Main | My View | View Issues | Change Log | Roadmap | Docs|
|Viewing Issue Simple Details|
|ID||Category||Severity||Reproducibility||Date Submitted||Last Update|
|0000519||[ALGLIB] Spec.functions||major||always||2013-04-23 17:24||2018-01-02 17:23|
|Summary||0000519: Exponential integral Ei(x) returns 0 for x <= 0|
The Ei(x) in ALGLIB returns 0 for all x <= 0 . This is not documented on the website:
In the source code, however, it says "Not defined for x <= 0", which, of course, explains this behavior, but doesn't really help.
Anyways, the function Ei(x) is defined on all real axis  and I see no reason why you would silently return 0 for x <= 0, while many other special function packages allow one to compute Ei(x) for negative arguments.
I need fast and accurate routines to compute the exponential integrals and would highly appreciate if you could address this problem.
|Additional Information||I'm looking specifically at the C/C++ version of ALGLIB, but it shouldn't really matter.|
According to Wiki , "definition above can be used for positive values of x, but the integral has to be understood in terms of the Cauchy principal value due to the singularity of the integrand at zero. For complex values of the argument, the definition becomes ambiguous due to branch points at 0 and . In general, a branch cut is taken on the negative real axis".
So values at negative axis are not well-defined because of branch cut.
The discussion about the ambiguity that you quoted above relates to the function of the complex argument (it starts with "For complex values of the argument..."), however, we are talking about a real-valued function of a real argument here.
Just have a look at the integral, it's well-defined for x < 0, however, at 0 the divergence happens and then, in order to use the same definition for x >= 0, you have to consider it as a VP.
Right now, I've switched to Boost , and I'm totally delighted about the accuracy and speed (4x faster then SPECFUN, didn't measure against CEPHES, because I need negative values).
However, Boost is a couple of hundreds of megabytes of source code, which sounds a bit too much if you only want one function out of it :-)
|2013-04-23 17:24||zaytsev||New Issue|
|2013-04-23 17:24||zaytsev||Programming language||=> All|
|2013-04-23 22:04||SergeyB||Note Added: 0000062|
|2013-04-23 23:38||zaytsev||Note Added: 0000063|
|2018-01-02 17:23||SergeyB||Status||new => assigned|
|2018-01-02 17:23||SergeyB||Assigned To||=> SergeyB|
|Mantis 1.1.6[^] Copyright © 2000 - 2008 Mantis Group|