@Tristan.T : Je n’avais pas compris que cette formule correspondait à ça. Peux-tu la blinder de parenthèses s’il-te-plaît ? Car moi je la comprends ainsi :
Et quand je la trace sur un graphique avec kmplot, elle n’est pas bonne (ça doit être un problème de parenthèses).
Pour ton programme, je l’ai réécrit en C en corrigeant les erreurs d’initialisation. Il fonctionne bien. Voici la version en C :
[code]#include <stdio.h>
#include <stdlib.h>
#include <math.h>
long double carre(long double x) {
return x*x;
}
long double mon_arcsinus(long double x, long m) {
long n = 0;
long double n_factoriel = 1;
long double deux_n_factoriel = 1;
long double deux_puissance_n = 1;
long double x_puissance_2n_plus_1 = x;
long double angle = 0;
do {
angle += (deux_n_factorielx_puissance_2n_plus_1) / (carre(deux_puissance_n * n_factoriel) * (2n+1));
++n;
n_factoriel = n;
deux_n_factoriel = (2n) * (2n - 1);
deux_puissance_n *= 2;
x_puissance_2n_plus_1 *= x * x;
} while (n <= m);
return angle;
}
int main(int argc, char ** argv) {
long double x = strtold(argv[1], NULL); //1er argument : valeur du sinus
long m = strtol(argv[2], NULL, 10); //2eme argument : precision
long double angle = mon_arcsinus(x, m);
printf("%.30Lf (sinus passe en argument)\n", x);
printf("%.30Lf (arcsinus prédéfini)\n", asinl(x));
printf("%.30Lf (angle calculé)\n", angle);
printf("%.30Lf (différence entre les angles)\n", asinl(x) - angle);
return EXIT_SUCCESS;
}[/code]
Pour le compiler, utiliser cette ligne de commande :