Bonjour
J'ai une question, la fonction sinus est:
x = l'angle en radiansCode:(((-1)^n)/(n*2+1)!)*x^(n*2+1)
n = une valeur partant de 0 qui s'incrémente dans une boucle (c'est la précision du calcul que l'on veut)
Voila ma fonction sinus en langage C:
Elle fonctionne parfaitement bien (quel que soit l'angle qu'on y met, < 360 ou >), j'ai également créé la fonction cosinus et tangente...Code:float Core::sin (const float ANGLE) { float angle = 0; float alpha = 0; unsigned long n = 0; float value = 0; bool quickSearch = false; unsigned long foundMultiply = 0; unsigned char precision = 0; unsigned char nPrecision = 0; signed char inverter = 1; unsigned long long powerFactor = 0; float powerAngle = 0; if (ANGLE >= -180 && ANGLE <= 180) { angle = ANGLE; alpha = ANGLE / (180.0 / _PI); } else if (ANGLE < -180) { while (quickSearch == false) { for (n = 1; ANGLE + (360 * (foundMultiply + n)) < -180; n *= 10) { } if (n == 1) { quickSearch = true; } else { foundMultiply += float (n) / 10.0; } } foundMultiply += 1; angle = ANGLE + (360 * foundMultiply); alpha = (ANGLE + (360 * foundMultiply)) / (180.0 / _PI); } else { while (quickSearch == false) { for (n = 1; ANGLE - (360 * (foundMultiply + n)) > 180; n *= 10) { } if (n == 1) { quickSearch = true; } else { foundMultiply += float (n) / 10.0; } } foundMultiply += 1; angle = ANGLE - (360 * foundMultiply); alpha = (ANGLE - (360 * foundMultiply)) / (180.0 / _PI); } if (angle == -90 || angle == 270) { value = -1; } else if (angle == -270 || angle == 90) { value = 1; } else if (angle != -360 && angle != -180 && angle != 0 && angle != 180 && angle != 360) { for (precision = 0; precision < 16; precision++) { nPrecision = (precision * 2) + 1; powerFactor = nPrecision; for (n = 2; n < nPrecision; n++) { powerFactor *= nPrecision - (n - 1); } powerAngle = alpha; for (n = 1; n < nPrecision; n++) { powerAngle *= alpha; } value += (float (inverter) / float (powerFactor)) * powerAngle; inverter *= -1; } } return value; }
Je souhaite maintenant créer la fonction arcsinus mais cela ne donne pas le bon résultat.
La voici:
Ce qu'il me faudrait en fait c'est quelqu'un qui sache m'expliquer l'inverse de:Code:float Core::arcsin (const float SIN) { float alpha = 0; unsigned char n = 0; unsigned char precision = 0; unsigned char nPrecision = 0; signed char inverter = 1; unsigned long long powerFactor = 0; float powerAlpha = 0; for (precision = 0; precision < 16; precision++) { nPrecision = (precision * 2) + 1; powerFactor = nPrecision; for (n = 2; n < nPrecision; n++) { powerFactor *= nPrecision - (n - 1); } powerAlpha = SIN; for (n = 1; n < nPrecision; n++) { powerAlpha *= SIN; } powerAlpha = powerAlpha * (180.0 / _PI); alpha += powerAlpha * (float (inverter) / float (powerFactor)); inverter *= -1; } //return alpha * (180.0 / _PI); return alpha; }
Pour que je puisse modifier ma fonction sinus comme il faut.Code:(((-1)^n)/(n*2+1)!)*x^(n*2+1)
Pouvez-vous m'aider s'il vous plaît?
Merci d'avance.
-----