modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/compile/udconvert.c (about)

     1  double
     2  unsigned_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
    15  unsigned_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
    25  double_to_unsigned (d)
    26       double d;
    27  {
    28    d += 2147483648.0;
    29    return ((int) d) - 2147483648;
    30  }