#include #include /* Access bit-level representation of floating-point number */ typedef unsigned float_bits; /* Compute (float) i */ float_bits float_i2f(int i) { if (i == INT_MIN) { return 0xCF000000; } if (i == 0) { return 0; } float_bits s = 0, f, e; if (i < 0) { i = -i; s = 0x80000000; } int hb = 30; while (!(i >> hb)) { hb--; } i ^= 1 << hb; e = hb + 127; if (hb > 23) { f = i >> (hb - 23); if ((i & (1 << (hb - 24))) && ((f & 1) || (i & ((1 << (hb - 24)) - 1)))) { f++; if (f & 0x00800000) { f = 0; e++; } } } else { f = i << (23 - hb); } return s | (e << 23) | f; } int main() { for (int x = INT_MIN; ; x++) { float_bits y = float_i2f(x); float *z = (float*) &y; assert(*z == (float) x); if (x == INT_MAX) { break; } } }