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.