1double 2unsigned_to_double1 (u) 3 unsigned u; 4{ 5 double d; 6 d = (int) u; /* convert as from a *signed* integer */ 7 return ((int) u < 0) 8 ? d + 4294967296.0 9 : d; 10} 11 12/* Alternatively */ 13 14double 15unsigned_to_double2 (u) 16 unsigned u; 17{ 18 double d; 19 u -= 2147483648; /* complement sign bit */ 20 d = (int) u; /* convert as from a *signed* integer */ 21 return d + 2147483648.0; 22} 23 24unsigned 25double_to_unsigned (d) 26 double d; 27{ 28 d += 2147483648.0; 29 return ((int) d) - 2147483648; 30} 31