[Math/C] Fast_Cos

Fast_Cos [Math/C] - Divers - Programmation

Marsh Posté le 13-02-2005 à 01:40:07    

Bonjour,  
 
Je code actuellement un petit moteur 3D et j'ai un petit souci, j'aimerai optimiser les fonctions de bases ( cos, sin, sqrt, etc ...)
 
Je pensais utiliser les développements limités avec pour cos la fameuse formule :
 
cos(x) = 1 - x^2 / 2! + x^4 /4! + ... + (-1)^n (x^2n / 2n!) + x^2n+1 E(x)
 
or voila, j'ai quand même voulu savoir comment les autres faisait pour ce calcule , que ça soit chez NVIDIA (le sdk) ou sur d'autres sites, je trouve le code suivant :
 

Code :
  1. float fast_cos(const float val)
  2. {
  3.      float fASqr = val*val;
  4.      float fResult = -2.605e-07f;
  5.      fResult *= fASqr;
  6.      fResult += 2.47609e-05f;
  7.      fResult *= fASqr;
  8.      fResult -= 1.3888397e-03f;
  9.      fResult *= fASqr;
  10.      fResult += 4.16666418e-02f;
  11.      fResult *= fASqr;
  12.      fResult -= 4.999999963e-01f;
  13.      fResult *= fASqr;
  14.      fResult += 1.0f;
  15.      return fResult; 
  16. }


 
Les coéficients du polynome ne correspondent pas (excatement) et j'aimerai comprendre pourquoi, si il s'agit d'une approximation mathèmatique et quelle est elle ? (je ne suis qu'en première année de licence math/info)
 
Merci pour toute vos réponses !!!!

Reply

Marsh Posté le 13-02-2005 à 01:40:07   

Reply

Marsh Posté le 13-02-2005 à 02:11:25    

Pourtant il me semble qu'ils correspondent..
 
Tu es sur d'avoir bien regardé ?

Reply

Marsh Posté le 13-02-2005 à 09:55:59    

tu peut aussi précalculer des cos,sin,tan dans uen table avec un pas 1/512 radian et coder tes fast_cos pour qu'il aille chercher leur valeur dans la table. A 1/512 radian, tu as tte la précision qu'il faut je pense.

Reply

Marsh Posté le 13-02-2005 à 10:45:46    

D'après la calculette :
1/8! = 2,4801587301587301587301587301587e-5
1/4! = 0,041666666666666666666666666666667
1/2  = 0.5
 
Ca colle, aux erreurs d'arrondi 32 bits près (je suppose que les coeffs sont calculés / norme IEEE je sais plus quoi (788 ?)pour les calculs numériques).


Message édité par el muchacho le 13-02-2005 à 10:48:27
Reply

Marsh Posté le 13-02-2005 à 15:54:02    

Merci pour vos réponses.  
 
Ca semble bien correspondre à l'arrondi à 32bits, je vais me documenter la dessu.
 
Merci el muchacho

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed