Unerwartete Ergebnisse aus sin- und cos-Funktionen für bekannte Winkel
Beim Umgang mit trigonometrischen Funktionen wie sin und cos in C/C ist dies von entscheidender Bedeutung um ihre Eingabeanforderungen zu verstehen. Ein häufiges Missverständnis besteht darin, anzunehmen, dass diese Funktionen Winkel in Grad erwarten. Allerdings erfordern die C/C-Funktionen sin und cos, dass ihre Eingabewinkel im Bogenmaß angegeben werden.
Um dies zu veranschaulichen, betrachten wir das gegebene Beispiel, bei dem ein Winkel von 180 Grad an sin und cos übergeben wird. Die erwarteten Ergebnisse, basierend auf trigonometrischen Identitäten, sind:
Allerdings , die gemeldeten Ergebnisse weichen ab signifikant:
Die Diskrepanz entsteht durch die DegreesToRadians ()-Funktion, anstatt eine exakte Konvertierung durchzuführen, liefert aufgrund der Rundung und der endlichen Genauigkeit von double ein ungefähres Ergebnis. Darüber hinaus ist die Konstante M_PI, die π darstellt, eine nahe, aber nicht präzise Näherung.
Um die Genauigkeit trigonometrischer Berechnungen zu verbessern, wird empfohlen, vor dem Aufruf von sin oder cos eine Argumentreduktion in Grad durchzuführen. Dieser Prozess stellt sicher, dass Winkel auf einen Bereich von -45° bis 45° reduziert werden, bevor sie an die trigonometrischen Funktionen übergeben werden.
Das bereitgestellte Codebeispiel demonstriert diese Technik, indem der Winkel auf einen angegebenen Bereich reduziert und dann aufgerufen wird Sin-Funktion.
extern double sind(double x) { // ... switch (quo % 4) { case 0: // Use * 1.0 to avoid -0.0 return sin(d2r(x90)* 1.0); case 1: return cos(d2r(x90)); case 2: return sin(d2r(-x90) * 1.0); case 3: return -cos(d2r(x90)); } return 0.0; }
Dieser Ansatz liefert präzisere Ergebnisse für trigonometrische Berechnungen, insbesondere für Winkel in der Nähe bekannter Winkel wie 90°, 180°, usw.
Das obige ist der detaillierte Inhalt vonWarum sind die Ergebnisse meiner C/C-Sinus- und Cos-Funktionen für bekannte Winkel ungenau?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!