Skip to content

Hyperbolic arc cosine fails on (-1) :: Complex r.

When allowing for complex results, the hyperbolic arc cosine is continuously defined on all ℝ.

In the (x < (-1)) real ray of the complex plane, acosh equals \z -> i * pi + acosh(abs z), which works fine for almost all arguments. Thus, acosh (-1) should equal i * pi; however due to the implementation as

acosh z = log (z + (z+1) * sqrt ((z-1)/(z+1)))

where the denominator in the root becomes zero at z = -1, this comes out as NaN :+ NaN.

Could be fixed trivially by adding a special case

acosh ((-1):+0) = 0:+pi

to the instance (RealFloat a) => Floating (Complex a) in Data.Complex.

Trac metadata
Trac field Value
Version 7.6.3
Type Bug
TypeOfFailure OtherFailure
Priority low
Resolution Unresolved
Component libraries/base
Test case acosh(-1) :: Complex Double
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information