|
| 1 | +// operators/DoubleEquivalence.java |
| 2 | +// (c)2021 MindView LLC: see Copyright.txt |
| 3 | +// We make no guarantees that this code is fit for any purpose. |
| 4 | +// Visit http://OnJava8.com for more book information. |
| 5 | + |
| 6 | +public class DoubleEquivalence { |
| 7 | + static void show(String desc, Double n1, Double n2) { |
| 8 | + System.out.println(desc + ":"); |
| 9 | + System.out.printf( |
| 10 | + "%e==%e %b %b%n", n1, n2, n1 == n2, n1.equals(n2)); |
| 11 | + } |
| 12 | + @SuppressWarnings("deprecation") |
| 13 | + public static void test(double x1, double x2) { |
| 14 | + // x1.equals(x2) // Won't compile |
| 15 | + System.out.printf("%e==%e %b%n", x1, x2, x1 == x2); |
| 16 | + Double d1 = x1; |
| 17 | + Double d2 = x2; |
| 18 | + show("Automatic", d1, d2); |
| 19 | + Double r1 = new Double(x1); |
| 20 | + Double r2 = new Double(x2); |
| 21 | + show("new Double()", r1, r2); |
| 22 | + Double v1 = Double.valueOf(x1); |
| 23 | + Double v2 = Double.valueOf(x2); |
| 24 | + show("Double.valueOf()", v1, v2); |
| 25 | + } |
| 26 | + public static void main(String[] args) { |
| 27 | + test(0, Double.MIN_VALUE); |
| 28 | + test(Double.MAX_VALUE, |
| 29 | + Double.MAX_VALUE - Double.MIN_VALUE * 1_000_000); |
| 30 | + } |
| 31 | +} |
| 32 | +/* Output: |
| 33 | +0.000000e+00==4.900000e-324 false |
| 34 | +Automatic: |
| 35 | +0.000000e+00==4.900000e-324 false false |
| 36 | +new Double(): |
| 37 | +0.000000e+00==4.900000e-324 false false |
| 38 | +Double.valueOf(): |
| 39 | +0.000000e+00==4.900000e-324 false false |
| 40 | +1.797693e+308==1.797693e+308 true |
| 41 | +Automatic: |
| 42 | +1.797693e+308==1.797693e+308 false true |
| 43 | +new Double(): |
| 44 | +1.797693e+308==1.797693e+308 false true |
| 45 | +Double.valueOf(): |
| 46 | +1.797693e+308==1.797693e+308 false true |
| 47 | +*/ |
0 commit comments