Java Problem, wieso ist Math.cos(Math.PI * 1.5) nicht 0?

...komplette Frage anzeigen

3 Antworten

3 Einflüsse auf die Genauigkeit:

a) Dein Variablentyp: double ist nur auf etwa 15 Nachkommastellen genau

b) Fehlerfortpflanzung: erst PI (nur 16 statt unendlich viele Stellen) dann Multiplikation dann cos

c) Berechnungsalgorithmus ist nur eine Näherungsformel!

90% aller Programmiersprachen benutzen zur Berechnung die Maschinenbefehle FSIN & FCOS. (intern 80 bit genau)

Neuere Compiler, die auch höhere Maschinenbefehle kennen (SSEx, AVX) sind meist schneller & genauer.

Browser wie der neue Chrome haben was eigenes optimiert.

Je größer die Argumente werden, also sich von 0 entfernen, um so ungenauer wird das Funktionsergebnis!

Der FSIN-Befehl rechnet oberhalb von 9.3e18 nicht mehr, sondern gibt das identische Ergebnis zurück: f(x)=x

Welchen der 3 Algorithmen Dein Java-Interpreter (oder hast Du einen Compiler, der eine EXE erzeugt) verwendet, kannst Du also mit sin(x) mit x  um 

9.2e18...1.31e19 testen:

http://www.gerdlamprecht.de/GrobeFPU_Fehler.htm

Antwort bewerten Vielen Dank für Deine Bewertung

Was ist es denn, was ist die Ausgabe?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Garrarufa
17.02.2016, 14:34

-1.8369701987210297E-16

0

Ich nehme an, das wird der gleiche Grund sein, warum ...

0.3 == 0.1 + 0.1 + 0.1

... dir ein false liefert: Gleitpunktmagie :)

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?