[comp.sys.atari.st] floating point info wanted

sandra@utah-cs.UUCP (Sandra J Loosemore) (12/10/86)

Can anyone provide details on the internal representation of floating
point numbers used by the various C compilers for the ST?  

Thanks,

-Sandra Loosemore (sandra@utah-cs.arpa)

braner@batcomputer.UUCP (12/11/86)

[]

The double-precision IEEE format, used for example by the Megamax C
FP library, is as follows: (msb to lsb)	(64 bits total)

	sign bit
	11-bit exponent (powers of 2)
	52-bit mantissa (binary)

The sign bit is 1 for negative.  (0.0 is all-bits-0.)
The exponent has $3FF added to it, so it's always positive.
The mantissa assumes an extra, "hidden" bit on the left, which is always '1'.
The mantissa is always positive: no twos-complements are used here!

Examples:   the value 1.5 is:  $3FF8,0000,0000,0000
            the value -5  is:  $C014,0000,0000,0000

Note that the msb is LOWEST in terms of 68000 RAM addresses.  For example,
if the value -5 is pointed to by a pointer with the value 10000, then
the addresses 10000, 10001, etc hold the byte values $C0, $14, etc.

The single-precision format is similar in spirit, but is 32 bits long,
and the exponent is 8 bits long.  Note that since the exponents are of
different lengths, the most significant 32 bits of a double are _NOT_
a usable float!!!

Note also that the IEEE conventions are rather ill-suited for efficient
calculations on the 68000 architecture, although they work quite well on
dedicated hardware such as the 8087 or the 32081.  For comparision, DBASIC
(as far as I know) uses the format: (64 bits total)

	sign bit
	two "don't care" bits
	13 bits exponent, with $1000 added
	48 bits mantissa, with NO "hidden" bit

For example, -5 is: $9003,A000,0000,0000

- Moshe Braner

PS: When will C compilers come with high quality FP packages, like the
(reportedly good) one supplied with AbSoft FORTRAN?????