1 /* Test IEEE +0/-0 rules */
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;
10 expect (double value
, double expected
)
12 if (expected
!= expected
) /* expected value is Not a number */
14 if (value
== value
) /* actual value is a number */
18 else if (value
!= value
)
19 abort (); /* actual value is a NaN */
21 else if (memcmp ((void *)&value
, (void *)&expected
, sizeof (double)) != 0)
22 abort (); /* values don't match */
27 expect (pzero
+ pzero
, pzero
);
28 expect (pzero
+ nzero
, pzero
);
29 expect (nzero
+ pzero
, pzero
);
30 expect (nzero
+ nzero
, nzero
);
32 expect (pzero
- pzero
, pzero
);
33 expect (pzero
- nzero
, pzero
);
34 expect (nzero
- pzero
, nzero
);
35 expect (nzero
- nzero
, pzero
);
37 expect (pzero
* pzero
, pzero
);
38 expect (pzero
* nzero
, nzero
);
39 expect (nzero
* pzero
, nzero
);
40 expect (nzero
* nzero
, pzero
);
42 expect (+1.00 * pzero
, pzero
);
43 expect (-1.00 * pzero
, nzero
);
44 expect (+1.00 * nzero
, nzero
);
45 expect (-1.00 * nzero
, pzero
);
47 expect (pzero
/ pzero
, nan
);
48 expect (pzero
/ nzero
, nan
);
49 expect (nzero
/ pzero
, nan
);
50 expect (nzero
/ nzero
, nan
);
52 expect (+1.00 / pzero
, pinf
);
53 expect (-1.00 / pzero
, ninf
);
54 expect (+1.00 / nzero
, ninf
);
55 expect (-1.00 / nzero
, pinf
);