|
|
1.1 ! root 1: /* ! 2: * libc/gen/ieee_f.c ! 3: */ ! 4: ! 5: /* ! 6: * ieee_f(float *ifp, float *dfp) ! 7: * Convert float from DECVAX format to IEEE format. ! 8: * dfp points to a DECVAX format float to convert. ! 9: * ifp points to a destination for the converted IEEE value; ! 10: * ifp may be identical to dfp for in-place conversion. ! 11: * The significand remains unchanged. ! 12: * Returns 0 if successful, -1 on underflow. ! 13: */ ! 14: ! 15: int ! 16: ieee_f(ifp, dfp) float *ifp, *dfp; ! 17: { ! 18: register int exp; ! 19: register unsigned char *cp; ! 20: ! 21: /* Copy to destination. */ ! 22: cp = (char *)ifp; ! 23: if (ifp != dfp) ! 24: memcpy(cp, (char *)dfp, sizeof(float)); ! 25: ! 26: /* Adjust exponent bias from 129 to 127. */ ! 27: exp = ((cp[3] & 0x7F) << 1) | ((cp[2] & 0x80) >> 7); ! 28: if (exp == 0) ! 29: return 0; ! 30: else if (exp > 2) { ! 31: /* Subtract 2 by decrementing the low bit of the hi byte. */ ! 32: --cp[3]; ! 33: return 0; ! 34: } ! 35: ! 36: /* Exponent underflow. */ ! 37: cp[3] = cp[2] = cp[1] = cp[0] = 0; ! 38: return -1; ! 39: } ! 40: ! 41: /* end of libc/gen/ieee_f.c */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.