tan 45 gibt mir 0,9999

7

Warum gibt tan 45 (0.7853981633974483 im Bogenmaß) mir 0.9999 ? Was ist mit dem folgenden Code falsch?

%Vor%

Ich glaube nicht, dass hier ein Tippfehler ist.

Also, was ist die Lösung hier?

    
siaooo 08.12.2012, 07:35
quelle

4 Antworten

16

Gleitkommaberechnungen führen oft zu solchen Ungenauigkeiten. Das Problem besteht darin, dass Zahlen innerhalb einer festen Anzahl von Bits nicht genau dargestellt werden können.

Um Ihnen ein anderes Beispiel (dezimal) zu geben, sind wir uns alle einig, dass 3 * (1/3) = 1 . Wenn Ihr Rechner jedoch nur 4 Dezimalstellen hat, wird 1/3 als 0.3333 dargestellt. Wenn das mit 3 multipliziert wird, erhalten Sie 0.9999 nicht 1 .

Als weitere Information werden die Gleitkommawerte auf den meisten Systemen normalerweise mit dem IEEE754-Standard dargestellt. Sie können danach suchen oder auf der Wikipedia-Seite nach weiteren Einzelheiten suchen. IEEE Fließkomma

    
Masked Man 08.12.2012, 07:41
quelle
10

Der nächste double bis pi/4 ist genau 0x1.921fb54442d18p-1 . Der Tangens dieses Double, zu mehr Bits als Sie benötigen, ist 0x1.fffffffffffff72cece67p-1 . Wenn Sie auf den nächsten double runden, erhalten Sie genau 0x1.fffffffffffffp-1 , weil 0x1.fffffffffffff72cece67p-1 kleiner ist als 0x1.fffffffffffff8p-1 .

    
tmyklebu 08.12.2012 15:42
quelle
2
___ qstnhdr ___ tan 45 gibt mir 0,9999 ___ answer13775578 ___

Gleitkommaberechnungen führen oft zu solchen Ungenauigkeiten. Das Problem besteht darin, dass Zahlen innerhalb einer festen Anzahl von Bits nicht genau dargestellt werden können.

Um Ihnen ein anderes Beispiel (dezimal) zu geben, sind wir uns alle einig, dass %code% . Wenn Ihr Rechner jedoch nur 4 Dezimalstellen hat, wird %code% als %code% dargestellt. Wenn das mit %code% multipliziert wird, erhalten Sie %code% nicht %code% .

Als weitere Information werden die Gleitkommawerte auf den meisten Systemen normalerweise mit dem IEEE754-Standard dargestellt. Sie können danach suchen oder auf der Wikipedia-Seite nach weiteren Einzelheiten suchen. IEEE Fließkomma

    
___ answer13778997 ___

Der nächste %code% bis %code% ist genau %code% . Der Tangens dieses Double, zu mehr Bits als Sie benötigen, ist %code% . Wenn Sie auf den nächsten %code% runden, erhalten Sie genau %code% , weil %code% kleiner ist als %code% .

    
___ tag123java ___ Java (nicht zu verwechseln mit JavaScript oder JScript oder JS) ist eine universelle objektorientierte Programmiersprache, die für die Verwendung in Verbindung mit der Java Virtual Machine (JVM) entwickelt wurde. "Java-Plattform" ist der Name für ein Computersystem, auf dem Tools zum Entwickeln und Ausführen von Java-Programmen installiert sind. Verwenden Sie dieses Tag für Fragen, die sich auf die Java-Programmiersprache oder Java-Plattform-Tools beziehen. ___ tag123math ___ Mathematik ist das Studium von Quantität, Struktur, Raum und Veränderung. Alle mathematischen Fragen auf dieser Website sollten programmbezogen sein. ___ answer13775577 ___

Das liegt wahrscheinlich daran, dass %code% 1 ist und der Rest ein Rundungsfehler ist. Fließkomma-Berechnungen sind aufgrund der Funktionsweise von Fließkommaberechnungen sehr unwahrscheinlich, um genaue Ergebnisse zu erhalten.

    
___ tag123floatingpoint ___ Fließkommazahlen sind Näherungen reeller Zahlen, die größere Bereiche als Ganzzahlen darstellen können, aber die gleiche Menge an Speicher verwenden, auf Kosten niedrigerer Genauigkeit. Wenn es sich bei Ihrer Frage um kleine arithmetische Fehler (z. B. warum 0,2 + 0,1 ist gleich 0,300000001?) Oder um Dezimalwandlungsfehler handelt, lesen Sie bitte die unten verlinkte Seite "info" vor dem Posten. ___ answer13775576 ​​___

Benutze dies

%Vor%     
___ tag123trigonometry ___ Trigonometrie ist ein Zweig der Mathematik, der Dreiecke und die Beziehungen zwischen ihren Seiten und den Winkeln zwischen den Seiten untersucht ___ tag123precision ___ Für Fragen zur numerischen Genauigkeit in der Programmierung. ___ qstntxt ___

Warum gibt %code% (0.7853981633974483 im Bogenmaß) mir %code% ? Was ist mit dem folgenden Code falsch?

%Vor%

Ich glaube nicht, dass hier ein Tippfehler ist.

Also, was ist die Lösung hier?

    
___
Mudassir Hasan 08.12.2012 07:41
quelle
0

Das liegt wahrscheinlich daran, dass tan(45) 1 ist und der Rest ein Rundungsfehler ist. Fließkomma-Berechnungen sind aufgrund der Funktionsweise von Fließkommaberechnungen sehr unwahrscheinlich, um genaue Ergebnisse zu erhalten.

    
Isaac 08.12.2012 07:41
quelle