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-
17- Double d1 = x1 ;
18- Double d2 = x2 ;
19- show ("Automatic" , d1 , d2 );
20-
21- Double r1 = new Double (x1 );
22- Double r2 = new Double (x2 );
23- show ("new Double()" , r1 , r2 );
24-
25- Double v1 = Double .valueOf (x1 );
26- Double v2 = Double .valueOf (x2 );
27- show ("Double.valueOf()" , v1 , v2 );
28-
29- }
30- public static void main (String [] args ) {
31-
32- //比较0和最小的浮点数
33- test (0 , Double .MIN_VALUE );
34-
35- System .out .println ("------------------------" );
36-
37- //最大值 和 (最大值 和 (最小值只差的一百万倍))比较 一个非常大的数值减去一个相对较小的数值,
38- //非常大的数值并不会发生显著变化。这个叫做 <b> 舍入误差 <\b>
39- test (Double .MAX_VALUE ,
40- Double .MAX_VALUE - Double .MIN_VALUE * 1_000_000 );
41-
42- System .out .println ("------------------------" );
43- test (2.1 , 3.5 );
44-
45- System .out .println ("------------------------" );
46- System .out .println (Double .MIN_VALUE ); //2^-1074
47- System .out .println (Double .MAX_VALUE );
48-
49-
50- }
51- }
52- /* Output:
53- 0.000000e+00==4.900000e-324 false
54- Automatic:
55- 0.000000e+00==4.900000e-324 false false
56- new Double():
57- 0.000000e+00==4.900000e-324 false false
58- Double.valueOf():
59- 0.000000e+00==4.900000e-324 false false
60- ------------------------
61- 1.797693e+308==1.797693e+308 true
62- Automatic:
63- 1.797693e+308==1.797693e+308 false true
64- new Double():
65- 1.797693e+308==1.797693e+308 false true
66- Double.valueOf():
67- 1.797693e+308==1.797693e+308 false true
68- */
1+ // operators/DoubleEquivalence.java // (c)2021 MindView LLC: see Copyright.txt // We make no guarantees that this code is fit for any purpose. // Visit http://OnJava8.com for more book information. public class DoubleEquivalence { static void show(String desc, Double n1, Double n2) { System.out.println(desc + ":"); System.out.printf( "%e==%e %b %b%n", n1, n2, n1 == n2, n1.equals(n2)); } @SuppressWarnings("deprecation") public static void test(double x1, double x2) { // x1.equals(x2) // Won't compile System.out.printf("%e==%e %b%n", x1, x2, x1 == x2); Double d1 = x1; Double d2 = x2; show("Automatic", d1, d2); Double r1 = new Double(x1); Double r2 = new Double(x2); show("new Double()", r1, r2); Double v1 = Double.valueOf(x1); Double v2 = Double.valueOf(x2); show("Double.valueOf()", v1, v2); } public static void main(String[] args) { //比较0和最小的浮点数 test(0, Double.MIN_VALUE); System.out.println("------------------------"); //最大值 和 (最大值 和 (最小值只差的一百万倍))比较 一个非常大的数值减去一个相对较小的数值, //非常大的数值并不会发生显著变化。这个叫做 <b> 舍入误差 <\b> test(Double.MAX_VALUE, Double.MAX_VALUE - Double.MIN_VALUE * 1_000_000); System.out.println("------------------------"); test(2.1, 3.5); System.out.println("------------------------"); System.out.println(Double.MIN_VALUE); //2^-1074 System.out.println(Double.MAX_VALUE); } } /* Output: 0.000000e+00==4.900000e-324 false Automatic: 0.000000e+00==4.900000e-324 false false new Double(): 0.000000e+00==4.900000e-324 false false Double.valueOf(): 0.000000e+00==4.900000e-324 false false ------------------------ 1.797693e+308==1.797693e+308 true Automatic: 1.797693e+308==1.797693e+308 false true new Double(): 1.797693e+308==1.797693e+308 false true Double.valueOf(): 1.797693e+308==1.797693e+308 false true */
0 commit comments