Best Practice Rundung bei sin() und cos()

Shadoka

Mitglied
Hi zusammen,

ich habe mir gerade folgenden Codeausschnitt angesehen:

Java:
double angle = Math.toRadians(90);
double ca = Math.cos(angle);
double sa = Math.sin(angle);

Der Cosinus ergibt 6.123233995736766E-17, der Sinus 1.0.

Warum rundet der Sinus korrekt, während der Cosinus diesen kruden Wert beibehält, statt 0 zu werden?

Grüße,
 

Shadoka

Mitglied
Dass die Rundungen bestenfalls ungenau sind, ist mir ja bewusst.
Schon die Umrechnung in das Bogenmaß dürfte ja ungenau sein, allerdings hätte ich dann sowohl beim Sinus als auch beim Cosinus ungenaue Werte erwartet...dies ist allerdings nur beim Cosinus der Fall.

Ich beschäftige mich zurzeit mit den Grundlagen der Spieleprogrammierung, momentan mit Drehmatrizen. Wird da dann mit diesen gerundeten Werten gerechnet, oder gibt es Möglichkeiten damit exakter umzugehen?
 

Marco13

Top Contributor
Ob in so einer Matrix nun 0 steht oder 0.000000000000000006123 spielt gerade für ein Spiel keine Rolle. Natürlich gibt es immer wieder Fälle, wo man aufpassen muss
[WR]
if (determinante(matrix) != 0) invertiere(matrix); // FALSCH
[/WR]
aber "normalerweise" muss man sich über sowas nicht viele Gedanken machen
 

Highchiller

Bekanntes Mitglied
Da Kosinus und Sinus eigentlich auch nur Reihen (also unendliche Summen sind) ist runden hier unumgänglich. Die Diskrepanz beider Werte vermute ich wie jurom. Sicherlich wird sich hier aus Genauigkeitsgründen sinus sauber berechnet mit einigen spezialfellen wobei der Kosinus vielleicht nur als umrechnung vom sinus betrachtet wird cos(x) = sin(x+PI/2).

Das würde für mich Sinn ergeben und trotzdem keine Performanceabstriche hervorrufen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Problem mit Rundung Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben