1 /* Test IEEE +0/-0 rules */
2
3 static double pzero = +0.0;
4 static double nzero = -0.0;
5 static double pinf = +1.0 / 0.0;
6 static double ninf = -1.0 / 0.0;
7 static double nan = 0.0 / 0.0;
8
9 void
expect(double value,double expected)10 expect (double value, double expected)
11 {
12 if (expected != expected) /* expected value is Not a number */
13 {
14 if (value == value) /* actual value is a number */
15 abort ();
16 }
17
18 else if (value != value)
19 abort (); /* actual value is a NaN */
20
21 else if (memcmp ((void *)&value, (void *)&expected, sizeof (double)) != 0)
22 abort (); /* values don't match */
23 }
24
main()25 main ()
26 {
27 expect (pzero + pzero, pzero);
28 expect (pzero + nzero, pzero);
29 expect (nzero + pzero, pzero);
30 expect (nzero + nzero, nzero);
31
32 expect (pzero - pzero, pzero);
33 expect (pzero - nzero, pzero);
34 expect (nzero - pzero, nzero);
35 expect (nzero - nzero, pzero);
36
37 expect (pzero * pzero, pzero);
38 expect (pzero * nzero, nzero);
39 expect (nzero * pzero, nzero);
40 expect (nzero * nzero, pzero);
41
42 expect (+1.00 * pzero, pzero);
43 expect (-1.00 * pzero, nzero);
44 expect (+1.00 * nzero, nzero);
45 expect (-1.00 * nzero, pzero);
46
47 expect (pzero / pzero, nan);
48 expect (pzero / nzero, nan);
49 expect (nzero / pzero, nan);
50 expect (nzero / nzero, nan);
51
52 expect (+1.00 / pzero, pinf);
53 expect (-1.00 / pzero, ninf);
54 expect (+1.00 / nzero, ninf);
55 expect (-1.00 / nzero, pinf);
56
57 exit (0);
58 }
59