Heim > Backend-Entwicklung > C++ > Warum sind die Ergebnisse meiner C/C-Sinus- und Cos-Funktionen für bekannte Winkel ungenau?

Warum sind die Ergebnisse meiner C/C-Sinus- und Cos-Funktionen für bekannte Winkel ungenau?

Susan Sarandon
Freigeben: 2024-12-02 16:33:11
Original
448 Leute haben es durchsucht

Why Are My C/C   sin and cos Function Results Inaccurate for Known Angles?

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:

  • sin(180°) = 0,0547
  • cos(180°) = 0,99

Allerdings , die gemeldeten Ergebnisse weichen ab signifikant:

  • sin(180°) = 3,5897934739308216e-009
  • cos(180°) = -1,00000

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;
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage