2- Autre approche possible, tabuler très partiellement cos et sin et interpoler en utilisant la formule ci-dessus :
Avec deux tables ayant chacune 9 éléments et contenant les valeurs de cos(theta) et sin(theta) pour theta multiple de PHI = PI/16 (donc allant des angles 0 à PI/2 inclus) et en interpolant à l'ordre 3, on obtient une erreur inférieure à 0.00001. En interpolant à l'ordre 4, l'erreur est inférieure à 0.000001.
Par exemple, à l'ordre 3 :
1 2 3 4 5 6 7
| double my_cos(double angle) // angle en radians compris entre 0 et PI/2(+PI/32)
{
unsigned int n = angle/PHI + 0.5;
double xangle = angle - n*PHI ;
double xangle2 = xangle*xangle/2.0;
return tcos[n]*(1-xangle2)-tsin[n]*xangle*(1-xangle2/3);
} |
Partager