Karim Belabas on Sun, 12 Apr 2015 10:13:08 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: cos: precision too low in mpsc1


* Chris De Corte [2015-04-12 04:51]:
> Now he gives me a solution as a Taylor series which I can not use.

[ Please copy-paste explicit reproducible examples, it is hard to guess
what other people input. ]

Something like this ?

(10:00) gp > cos(x)
%1 = 1 - 1/2*x^2 + 1/24*x^4 - 1/720*x^6 + 1/40320*x^8 - 1/3628800*x^10 + 1/479001600*x^12 - 1/87178291200*x^14 + 1/20922789888000*x^16 + O(x^18)

This is probably an error in your script where you take the value of 'cos'
at an "undefined variable", i.e. a formal variable, and get a t_SER.

Just make sure to assign a numeric value (e.g., x = Pi) first.

> Maybe the cos function should first do something like Mod(x,2*Pi) to bring
> the big number back to a smaller one

Actually, x % (2*Pi). [ Mod() is a constructor for modular types and
quotient rings, it does not apply to t_REALs; % on the other hand is a
generalized Euclidean remainder, which still makes sense ]

(10:02) gp > 10.0 % (2*Pi)
%2 = 3.7168146928204135230747132334409942316

(10:02) gp > Mod(10.0, 2*Pi)
  ***   at top-level: Mod(10.0,2*Pi)
  ***                 ^--------------
  *** Mod: forbidden division t_REAL % t_REAL.


In fact, cos does something like this (modulo Pi/2).

But this won't help with your precision issues:

(10:02) gp > 1e100 % (2*Pi)
  ***   at top-level: 1e100%(2*Pi)
  ***                      ^-------
  *** _%_: precision too low in truncr (precision loss in truncation).

Same reason as before: we fail to compute the Euclidean quotient

  floor(1e100 / (2*Pi))

because the t_REAL may represent any real number in a huge interval (containing
more than one integer in this case). Solution: increase the accuracy (\p200)
or use exact rational numbers !

Cheers,

    K.B.
--
Karim Belabas, IMB (UMR 5251)  Tel: (+33) (0)5 40 00 26 17
Universite de Bordeaux         Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux.fr/~kbelabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]
`