#9620: conflicting branch cut conventions
-----------------------+----------------------------------------------------
Reporter: rbk | Owner: AlexGhitza
Type: defect | Status: new
Priority: major | Milestone:
Component: algebra | Keywords:
Author: | Upstream: Not yet reported upstream; Will do
shortly.
Reviewer: | Merged:
Work_issues: |
-----------------------+----------------------------------------------------
For multi-valued complex functions, the choice of principal values and
where complex branch cuts are continuous is a matter of convention but
there is a clear predominant convention which has been advocated by Kahan,
can be found in Guy Steele's CLTL2 (chapter 12.5.3) and is implemented in
most Lisp dialects, in the C99 standard, the upcoming C++0x standard, the
CLN library, Mathematica, Maple, Sage's CDF, MPMath, and many others.
However, some libraries disagree with the predominant convention for
branch cuts of inverse trigonometric and hyperbolic functions.
Unfortunately for Sage, Pari is one of the systems that disagree. This
leads to surprising results that are difficult to explain to new users,
like this fine example:
{{{
sage: acosh(-1.0-0.00001*I) - acosh(CDF(-1,-0.0000001))
-0.00347850806404590 + 6.27970680439127*I
}}}
It turns out that all of Pari's branch cuts of inverse trigonometric and
hyperbolic functions are somehow affected.
Luckily we don't disagree about roots and the logarithm any more. :-)
* asin: The asin() function is not continuous as the cut is approached
coming around the finite endpoint of the cuts in a counter clockwise
direction.
* acos: Pari picks an unconventional principal branch in the left complex
plain.
* atan: The atan() function is not continous as the cut is appraoched
coming around the finite endpoint of the cut along the negative imaginary
axis in a counter clockwise direction.
* asinh: The asinh() function is not continuous as the cut is approached
coming around the finite endpoint of the cuts in a counter clockwise
direction.
* acosh: Pari picks an unconventional principal branch in the lower
complex plain.
* atanh: The atan() function is not continous as the cut is appraoched
coming around the finite endpoint of the cut along the positive real axis
in a counter clockwise direction.
Applying the attached patch to Pari 2.3.5 in Sage 4.5.1 makes the
implementations in sage.libs.mpmath, sage.libs.pari, and
sage.rings.complex_double return the same values within numerical
accuracy.
--
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/9620>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica,
and MATLAB
--
You received this message because you are subscribed to the Google Groups
"sage-trac" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sage-trac?hl=en.