1extern void abort (void); 2 3union _D_rep 4{ 5 unsigned short rep[4]; 6 double val; 7}; 8 9int add(double* key, double* table) 10{ 11 unsigned i = 0; 12 double* deletedEntry = 0; 13 while (1) { 14 double* entry = table + i; 15 16 if (*entry == *key) 17 break; 18 19 union _D_rep _D_inf = {{ 0, 0, 0, 0x7ff0 }}; 20 if (*entry != _D_inf.val) 21 abort (); 22 23 union _D_rep _D_inf2 = {{ 0, 0, 0, 0x7ff0 }}; 24 if (!_D_inf2.val) 25 deletedEntry = entry; 26 27 i++; 28 } 29 if (deletedEntry) 30 *deletedEntry = 0.0; 31 return 0; 32} 33 34int main () 35{ 36 union _D_rep infinit = {{ 0, 0, 0, 0x7ff0 }}; 37 double table[2] = { infinit.val, 23 }; 38 double key = 23; 39 int ret = add (&key, table); 40 return ret; 41} 42