diesen Code ausführen, und sehen, wo es aufhört
public class FindPrecisionDouble {
static public void main(String[] args) {
double x = 1.0;
double y = 0.5;
double epsilon = 0;
int nb_iter = 0;
while ((nb_iter < 1000) && (x != y)) {
System.out.println(x-y);
epsilon = Math.abs(x-y);
y = (x + y) * 0.5;
}
final double prec_decimal = - Math.log(epsilon)/Math.log(10.0);
final double prec_binary = - Math.log(epsilon)/Math.log(2.0);
System.out.print("On this machine, for the 'double' type, ");
System.out.print("epsilon = ");
System.out.println(epsilon);
System.out.print("The decimal precision is ");
System.out.print(prec_decimal);
System.out.println(" digits");
System.out.print("The binary precision is ");
System.out.print(prec_binary);
System.out.println(" bits");
}
}
Variable y
den kleinsten Wert anders als 1.0
wird . Auf meinem Computer (Mac Intel Core i5) stoppt es bei 1.1102...E-16
. Es gibt dann die Genauigkeit aus (in Dezimal und in Binär).
Wie in https://en.wikipedia.org/wiki/Machine_epsilon angegeben, kann die Gleitkomma-Genauigkeit mit dem Epsilon-Wert geschätzt werden. Es ist "die kleinste Zahl, die, wenn addiert, ergibt ein anderes Ergebnis als eins" (Ich habe eine kleine Variation: 1-e anstelle von 1 + e, aber die Logik ist die gleiche)
I '
ll erklären in dezimal: Wenn Sie eine 4-Dezimale Genauigkeit haben, können Sie 1,0000 - 0,0001 ausdrücken, aber Sie können die Zahl 1,00000-0,00001 nicht ausdrücken (Ihnen fehlt die fünfte Dezimalstelle). In diesem Beispiel ist das Epsilon mit einer Genauigkeit von 4 Dezimalstellen 0,0001. Das Epsilon misst direkt die Gleitkomma-Genauigkeit. Transponiere einfach zu binär.
Bearbeiten Ihre Frage wurde gestellt "Wie zu bestimmen ...". Die Antwort, die Sie suchten, war eher eine Erklärung als eine Möglichkeit, die Genauigkeit zu bestimmen (mit der Antwort, die Sie akzeptierten). Wie auch immer, für andere Leute bestimmt die Ausführung dieses Codes auf einer Maschine die Genauigkeit für den "doppelten" Typ.
Haben Sie das [verlinkte Wiki in der Duplikatsfrage] (https://en.wikipedia.org/wiki/Double-precision_floating-point_format) angeschaut? Java verwendet IEEE 754 Fließkomma-Doubles. –