home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_08_07 / 8n07137b < prev    next >
Text File  |  1990-06-19  |  877b  |  38 lines

  1. float
  2. read_MSBIN_float(FILE *fp);
  3. /* read a 4 byte MSBIN float from file fp
  4.    and convert to internal format
  5. */
  6. {
  7. unsigned char org_data[4];
  8. int negative;
  9. double mantissa;
  10. double exponent;
  11. double return_value;
  12.  
  13. /* get data */
  14. fread(org_data, sizeof(org_data), 1, fp);
  15.  
  16. /* get exponent form msb */
  17. exponent = (double) org_data[0];
  18.  
  19. /* get sign bit from bit 23 */
  20. negative = (org_data[1] & 0x80) == 0x80;
  21.  
  22. /* Generate mantissa from ls 23 bits */
  23. mantissa = ((double) (((long) (org_data[1] & 0x7f)) << 16));
  24. mantissa += ((double) (((long) org_data[2] << 8));
  25. mantissa += ((double) ((long) org_data[3]));
  26.  
  27. /* normalize mantissa */
  28. mantissa = mantissa / pow(2.0, 23.0);
  29.  
  30. /* Generate full value */
  31. return_value = mantissa * pow(2.0, exponent);
  32.  
  33. /* adjust for sign */
  34. if (negative) return_value = -return_value;
  35.  
  36. return ((float) return_value);
  37. }
  38.