/* Copyright 1982 Alcyon Corporation 8716 Production Ave. San Diego, Ca. 92121 */ /*char *version "@(#) _ieeetof - dec 29, 1982"; */ /* * IEEE Floating Point Representation to Internal Representation : * IEEE Standard Single Precision Representation Floating Point * * float * _ieeetof(lf) * long lf; * * Largest positive number is 3.4 * 10^33 and the smallest positive * number is 1.2 * 10^-38. * Rely's on the fact that a long and a float are both 32 bits. */ #define BIAS 127L float _ieeetof(lf) long lf; { register long exp; register int count, fsign; float f; if (lf == 0L) return(0.0); if (lf < 0L) { fsign = 1; lf =& 0x7fffffff; /* mask MSB (sign) */ } else fsign = 0; exp = (lf >> 23) & 0xff; /* biased ieee exponent */ exp =- BIAS; lf =& 0x7fffff; /* 23 bits of fraction */ f = lf; if (lf != 0) /* don't need to do floating point test !!! */ f = f / 8388608.0; /* 2 ^ 23 */ f = f + 1.0; /* ieee fraction : 1.F */ while (exp < 0) { /* negative exp : 2^-? */ f = f / 2.0; exp++; } while (exp > 0) { /* positive exp : 2^+? */ f = f * 2.0; exp--; } if (fsign) f = -f; return(f); }  exp--; } if (fsign) f = -f; return(f); }  exp--; } if (fsign) f = -f; return(f); }  exp--; } if (fsign) f = -f; return(f); }