extern void abort (void); union _D_rep { unsigned short rep[4]; double val; }; int add(double* key, double* table) { unsigned i = 0; double* deletedEntry = 0; while (1) { double* entry = table + i; if (*entry == *key) break; union _D_rep _D_inf = {{ 0, 0, 0, 0x7ff0 }}; if (*entry != _D_inf.val) abort (); union _D_rep _D_inf2 = {{ 0, 0, 0, 0x7ff0 }}; if (!_D_inf2.val) deletedEntry = entry; i++; } if (deletedEntry) *deletedEntry = 0.0; return 0; } int main () { union _D_rep infinit = {{ 0, 0, 0, 0x7ff0 }}; double table[2] = { infinit.val, 23 }; double key = 23; int ret = add (&key, table); return ret; }