#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.

Reply via email to