der unmittelbaren Fällen würde ich denken zu überprüfen sind 0, + unendlich und -unendlich und NaN:
static void check(double x) {
double a, b;
System.out.printf(
"%9s %9s %23s %5s%n",
x, a = x - Math.ulp(x), b = Math.nextAfter(x, Double.NEGATIVE_INFINITY), a == b);
System.out.printf(
"%9s %9s %23s %5s%n",
x, a = x + Math.ulp(x), b = Math.nextAfter(x, Double.POSITIVE_INFINITY), a == b);
System.out.println();
}
public static void main(String[] args) throws java.lang.Exception {
check(0);
check(Double.POSITIVE_INFINITY);
check(Double.NEGATIVE_INFINITY);
check(Double.NaN);
}
Ideone demo
Ausgang:
0.0 -4.9E-324 -4.9E-324 true
0.0 4.9E-324 4.9E-324 true
Infinity NaN 1.7976931348623157E308 false
Infinity Infinity Infinity true
-Infinity -Infinity -Infinity true
-Infinity NaN -1.7976931348623157E308 false
NaN NaN NaN false
NaN NaN NaN false
Dass die Ausdrücke aren‘ t gleich in der NaN
Fall ist nicht überraschend (nach der Definition von NaN); aber diese Ausdrücke gelten auch nicht für + unendlich und -infinity (siehe die letzte Spalte).
Diese Antwort soll keine erschöpfende Liste problematischer Werte liefern, sondern zeigen, dass einige problematische Werte existieren.
Wenn Sie betrachten, was bei ganzzahligen Zweierpotenzen passiert, wie beispielsweise 0,25, 0,5, 1,0, 2,0 usw., sollten Sie wichtige Einblicke in Gleitkommazahlen erhalten. –