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
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
.
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
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% .
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.
Benutze dies
%Vor%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?
Tags und Links java math floating-point precision trigonometry