15Fermer17
cidrolinLe 12/10/2009 à 22:19
Kevin Kofler (./14) :
Tu peux aussi faire des calculs avec des approximations polynomiales (par exemple les développements limités).


C'est la première méthode à laquelle j'avais pensée, mais je crois bien que c'est celle implémentée en C.
Flanker (./15) :
faut d'abord faire une réduction d'argument entre 0 et pi/2, sinon c'est pourri


float fsin(float x)
{

 {
 // On travaille modulo 2*pi
 x = fmod(x, 2*PI);

 // On utilise le DSE du sin : x - x^3/3! + x^5/5! - x^7/7!... en le factorisant par x
 float res = 1;
 float x_carre = x*x;
 double coeff = 1;
 int i = 2;

 do
 {
 coeff = (-coeff * x_carre) / (i*(i+1));
 res += coeff;

 i+=2;
 } while (fabs(coeff)>0.01);

 return x * res;
 } 
}


Mais c'est encore plus long que TI, même avec cette précision toute pourrie.

Cela dit, la réduction d'argument elle ne sert à rien là (enfin je crois). Il faudrait garder en mémoire les valeurs déjà calculées et les reprendre ? Ouh là là. Ca va être dur.


J'ai essayé aussi avec l'algorithme de Cordic, mais là, c'est affreusement lent.