Modify

Ticket #7291 (closed Bugs: fixed)

Opened 20 months ago

Last modified 17 months ago

complex atan is not the best it could be

Reported by: Stephen Montgomery-Smith <stephen@…> Owned by: johnmaddock
Milestone: To Be Determined Component: math
Version: Boost 1.52.0 Severity: Problem
Keywords: Cc:

Description

For complex atan, when x and y are non-negative, the following formula is rather foolproof:

atanh(z) = 0.25 * log1p(4*x / pow(|z-1|,2)) + 0.5 * I * atan2(2y, (1-x*x-y*y))

where z = x+I*y. Just handle the few special cases when you get overflow or underflow.

I have implemented a C version at  http://people.freebsd.org/~stephen/catrig.c.

Also, email Tom Fairgrieve <tff@…>. He has an unpublished work by Hull, himself, and Tang, very similar to the work they did on the complex arcsine.

Attachments

atanh-patch Download (5.8 KB) - added by Stephen Montgomery-Smith <stephen@…> 20 months ago.

Change History

comment:1 Changed 20 months ago by johnmaddock

  • Owner set to johnmaddock
  • Component changed from None to math

comment:2 Changed 20 months ago by Stephen Montgomery-Smith <stephen@…>

Use this for the imaginary part: 0.5 * atan2(2y, (1-x)*(1+x)-y*y) Replacing 1-x*x by (1-x)(1+x) improves the error quite a bit when x is close to 1.

Changed 20 months ago by Stephen Montgomery-Smith <stephen@…>

comment:3 Changed 20 months ago by Stephen Montgomery-Smith <stephen@…>

The patch I just uploaded is a diff to today's svn. It seems to work rather well.

comment:4 Changed 17 months ago by johnmaddock

  • Status changed from new to closed
  • Resolution set to fixed

(In [81624]) Lots of small patches. Update and regenerate docs. Fixes #7183. Fixes #7290. Fixes #7291. Fixes #7649. Refs #7492.

View

Add a comment

Modify Ticket

Change Properties
<Author field>
Action
as closed
The resolution will be deleted. Next status will be 'reopened'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.