| Karim BELABAS on Tue, 18 Mar 2003 11:25:17 +0100 (MET) |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: real precision again |
On Tue, 18 Mar 2003, Walter Neumann wrote:
> At large precision (over 395 digits) sin(Pi*2.) claims to have twice as
> many significant digits as it should:
[...]
> ? sin(%)
> %4 = 2.083415134163379771317306786512007684572941095163701634157290887739967165726519878072310347834290217941711584606256087453734814712822486064338376377290291271528114660633609372113745774583418171579011473210390805058843715841645813527378491473322289166282480743273765616722933205149866985251359777695245970930844694020475677754390894758209754567147135178467574886857510516861792192562776849904346531125 E-404
That's much more than twice as many...
(11:18) gp > \p400
(11:18) gp > sin(2*Pi)
%1 = 2.083415135 E-404
is better.
It's related to a topic recently discussed [ subject was sin(x) for exact huge
argument ] : we really compute cos(x mod Pi/2) - 1, which can't have more
significant digits than x mod Pi/2. Unfortunately the computation was
organized in the following way:
let prec := precision of x
reduce x mod Pi/2
...
assign result to real of precision prec
which is wrong if catastrophic cancellation occurs when reducing mod Pi/2.
Fixed. [ The computation also required a reduction mod Pi/2 in full
accuracy, which is wasteful; and always computed Pi, even if |x| < 1. Both
fixed. ]
Karim.
--
Karim Belabas Tel: (+33) (0)1 69 15 57 48
Dép. de Mathématiques, Bât. 425 Fax: (+33) (0)1 69 15 60 19
Université Paris-Sud http://www.math.u-psud.fr/~belabas/
F-91405 Orsay (France) http://www.parigp-home.de/ [PARI/GP]