Résultats inattendus pour les fonctions sin et cos avec entrée en degrés
Lors de l'utilisation des fonctions C/C sin() et cos() pour les angles exprimés en degrés, des écarts peuvent résulter de l'interprétation mathématique des degrés par rapport aux radians.
Cause de Divergence
Les fonctions sin() et cos() de C/C sont conçues pour accepter des angles en radians. Cependant, l'utilisation ultérieure de la fonction DegreesToRadians() pour convertir les degrés en radians introduit une approximation inhérente en raison de l'arrondi et des limites de précision finie du type de données double. De plus, l'utilisation de M_PI peut entraîner de légers écarts par rapport à la définition mathématique de π.
Interprétation mathématique
sin(0,0547) = 0,0547
cos(0,0547 ) = 0,9984
Lorsqu'il est exprimé en degrés :
sin(0,0547) = sin(0,0547 × 180 / π) ≈ 0,0031
cos(0,0547) = cos(0,0547 × 180 / π) ≈ 0,9995
Solution
Pour résoudre cet écart, nous recommandons de réduire l'angle en degrés avant d'invoquer les fonctions trigonométriques. Cette technique garantit une précision dans une plage de -45° à 45°.
#define M_PIf (3.14159265358979323846) #include <stdio.h> double DegreesToRadians(double degrees) { return degrees * M_PIf / 180; } double sind(double x) { if (x < 0.0) { return -sind(-x); } int quo; double x90 = remquo(fabs(x), 90.0, &quo); switch (quo % 4) { case 0: return sin(DegreesToRadians(x90)); case 1: return cos(DegreesToRadians(x90)); case 2: return sin(DegreesToRadians(-x90)); case 3: return -cos(DegreesToRadians(x90)); } }
Sample Output
Utilisation de la fonction sind() améliorée :
printf("sin() of 180.0 degrees: %f\n", sin(DegreesToRadians(180.0))); printf("sind() of 180.0 degrees: %f\n", sind(180.0));
Sortie
sin() of 180.0 degrees: -1.2246467991474805e-16 sind() of 180.0 degrees: -0.0000000000000000e+00
Cette sortie démontre une précision résultats pour les fonctions sin() et cos() avec des angles donnés en degrés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!