Die Methode Java Math.cos () gibt 0 nicht zurück, wenn sie erwartet wird

8

Java auf einem Windows 7 PC zu benutzen (nicht sicher, ob das wichtig ist) und Math.cos () auf Werte zu setzen, die 0 (wie pi / 2) zurückgeben sollen, gibt kleine Werte zurück, aber kleine Werte, außer ich bin Missverständnis, sind viel größer als 1 ul weg von Null.

%Vor%

Ist das tatsächlich innerhalb 1 ul und ich bin einfach verwirrt? Und wäre dies eine akzeptable Wrapper-Methode, um diese kleine Ungenauigkeit zu beheben?

%Vor%     
dimo414 10.02.2010, 09:31
quelle

3 Antworten

10

Vergessen Sie nicht, dass Math.PI/2 eine Annäherung ist. Es wird nicht genau pi / 2 sein, also wird das Ergebnis von cos(Math.PI/2) nicht genau 0 sein.% Co_de% gibt möglicherweise eine ziemlich genaue Version zurück des Kosinus des genauen Werts, der durch die Berechnung von Math.cos zurückgegeben wird.

    
Jon Skeet 10.02.2010 09:36
quelle
7

Sie sollten niemals == mit Doppelpunkten verwenden. Sie müssen immer innerhalb der Fehlermarge tun. 10 -17 ist gute Präzision, wenn Sie mich fragen. Die Ulp-Zahl von 10 -32 ist nur das Vorkommen des Doppelten, das in 10 -17 Größenordnung ist, wie 2.220446049250313E-16 ist die Genauigkeit der Zahl in 10 0 Größe.

    
Slartibartfast 10.02.2010 09:46
quelle
2

Dies ist ein häufiger Fehler, wenn Sie anfangen, dieser Link hat eine sehr technische Diskussion der Gründe warum. Ссылка

Aber in seiner einfachsten Form, so wie wir 1/3 im Dezimalsystem nicht genau darstellen können, gibt es Werte, die im Binärsystem nicht genau dargestellt werden können

    
Goibniu 10.02.2010 09:51
quelle

Tags und Links