1/* Test IEEE +0/-0 rules */ 2 3static double pzero = +0.0; 4static double nzero = -0.0; 5static double pinf = +1.0 / 0.0; 6static double ninf = -1.0 / 0.0; 7static double nan = 0.0 / 0.0; 8 9void 10expect (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 25main () 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#ifndef _TMS320C6700 48 /* C6X floating point division is implemented using reciprocals. */ 49 expect (pzero / pzero, nan); 50 expect (pzero / nzero, nan); 51 expect (nzero / pzero, nan); 52 expect (nzero / nzero, nan); 53 54 expect (+1.00 / pzero, pinf); 55 expect (-1.00 / pzero, ninf); 56 expect (+1.00 / nzero, ninf); 57 expect (-1.00 / nzero, pinf); 58#endif 59 60 exit (0); 61} 62