Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- union U {
- int i;
- float f;
- };
- float h2f(unsigned short y)
- {
- if (BigEndian)
- y=ToLittleEndian(y);
- U value;
- int s = (y >> 15) & 0x00000001;
- int e = (y >> 10) & 0x0000001f;
- int m = y & 0x000003ff;
- if (e == 0)
- {
- if (m == 0)
- {
- //
- // Plus or minus zero
- //
- return s << 31;
- }
- else
- {
- //
- // Denormalized number -- renormalize it
- //
- while (!(m & 0x00000400))
- {
- m <<= 1;
- e -= 1;
- }
- e += 1;
- m &= ~0x00000400;
- }
- }
- else if (e == 31)
- {
- if (m == 0)
- {
- //
- // Positive or negative infinity
- //
- return (s << 31) | 0x7f800000;
- }
- else
- {
- //
- // Nan -- preserve sign and significand bits
- //
- return (s << 31) | 0x7f800000 | (m << 13);
- }
- }
- //
- // Normalized number
- //
- e = e + (127 - 15);
- m = m << 13;
- //
- // Assemble s, e and m.
- //
- value.i = (s << 31) | (e << 23) | m;
- return value.f;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement