Floating Point Formats
IEEE 4 byte real 31 30 23 22 0 ┌─┬────────┬──────────────────────────┐ │s│ 8 bits │msb 23 bit mantissa lsb│ └─┴────────┴──────────────────────────┘ │ │ └──────────────── mantissa │ └──────────────────────────────── biased exponent (7fh) └───────────────────────────────────── sign bit IEEE 8 byte real 63 62 52 51 0 ┌─┬──────────┬────────────────────────────────────┐ │s│ 11 bits │msb 52 bit mantissa lsb│ └─┴──────────┴────────────────────────────────────┘ │ │ └──────────────── mantissa │ └──────────────────────────────── biased exponent (3FFh) └───────────────────────────────────── sign bit Microsoft 4 byte real 31 24 23 22 0 ┌────────┬─┬──────────────────────────┐ │ 8 bits │s│msb 23 bit mantissa lsb│ └────────┴─┴──────────────────────────┘ │ │ └──────────────── mantissa │ └──────────────────────────── sign bit └────────────────────────────── biased exponent (81h) Microsoft 8 byte real (see note below) 63 56 55 54 0 ┌───────┬─┬────────────────────────────────────┐ │ 8bits │s│msb 52 bit mantissa lsb│ └───────┴─┴────────────────────────────────────┘ │ │ └──────────── mantissa │ └───────────────────────────── sign bit └─────────────────────────── biased exponent (401h, see below) IEEE 10 byte real (temporary real) 79 78 64 63 62 0 ┌─┬───────────┬─┬────────────────────────────────────────┐ │s│ 15 bits │1│msb 63 bit mantissa lsb│ └─┴───────────┴─┴────────────────────────────────────────┘ │ │ │ └───── mantissa │ │ └──────────────────────── first mantissa bit │ └───────────────────────────── biased exponent (3FFFh) └────────────────────────────────── sign bit Turbo Pascal 6 byte real 47 40 39 38 0 ┌────────┬─┬────────────────────────────────────┐ │ 8 bits │s│msb 39 bit mantissa lsb│ └────────┴─┴────────────────────────────────────┘ │ │ └──────────── mantissa │ └───────────────────────────── sign bit └──────────────────────────────── biased exponent (80h) Microsoft Fortran Complex number ┌──────────────────────────┬─────────────────────────────┐ │ Float Real component │ Float Imaginary component │ └──────────────────────────┴─────────────────────────────┘ (each component is either 8 or 16 byte IEEE real) - sign bit representation: 0 is positive and 1 is negative - in all float formats except the IEEE 10 byte real, the mantissa is stored without most significant bit; since the state of this bit is known to be set, it is not included and the exponent is adjusted accordingly - all formats use binary float representation - memory representation uses 80x86 reverse byte/word order. - Microsoft languages use the IEEE real formats; BASIC is the only normal user of the Microsoft float format - Microsoft 8 byte real format has not been verified; several Microsoft publications show an 8 bit exponent instead of 11 bits and state the BIAS is 401h; the discrepancy is that 8 bits can't hold the value 401h (requires 11 bits) True exponent is the exponent value minus the following bias: 81h for Microsoft 4 byte real 401h for Microsoft 8 byte real 7Fh for IEEE 4 byte real 3FFh for IEEE 8 byte real 80h for Turbo Pascal 6 byte real Size Range Significant digits 4 byte real 8.43x10E-37 to 3.37x10E38 6-7 8 byte real 4.19x10E-307 to 1.67x10E308 15-16 10 byte real 3.4x10E-4932 to 1.2x10E4932 19 - see dmsbintoieee() dieeetomsbin() NUMERIC RANGES