1 double unsigned_to_double1(u)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 14 double unsigned_to_double2(u)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 24 unsigned double_to_unsigned(d)25double_to_unsigned (d) 26 double d; 27 { 28 d += 2147483648.0; 29 return ((int) d) - 2147483648; 30 } 31