Hinweise zu den Fließkommazahlen

Darstellung der ZahlenFehlerbehandlung
FormathinweiseWandlungshinweise

Darstellung der Zahlen

Der Zahlenbereich umfaßt 3.4 E38 bis -5.9 E-39 mit einer Genauigkeit von sieben Ziffern (Bei einer Mantissa mit 23 Bit sind das 2^-23 = 1.2 E-7).

Die Zahlen werden kodiert als

Byte 1Normalisierte Mantisse, MSB (mit Vorzeichen)
Byte 2Mantisse
Byte 3Mantisse, LSB
Byte 4Exponent in binärer 2'er Komplementdarstellung

Die Mantisse erklärt sich wie folgt:
Bei einer Länge von drei Bytes ergeben sich 3*8=24 Bits. Das MSB wird als Vorzeichen benutzt. Das nächste Bit hat eine Wertigkeit von 1/2, das nächste Bit 1/4, dann 1/8 usw. Hieraus ersieht man, daß der Wert der Mantisse maximal 1/2+1/4+1/8+..., also immer < 1 ist. Der Ausdruck "Normalisierung" bedeutet hierbei, daß immer das dem MSB folgende Bit gesetzt ist, die Mantisse also immer >= 0,5 ist. Weil das MSB als Vorzeichen benutzt wird, muß der ermittelte Wert noch mit zwei multipliziert werden und danach muß nur noch der so ermittelte Wert der mit dem Exponenten multipliziert werden, um den realen Zahlenwert zu erhalten.

In der hier vorliegenden Kodierung bedeutet:

Exponent (hex)002^0= 1
 012^1= 2
 022^2= 4
 usw.
 FF2^-1= 1/2
 FE2^-2= 1/4
 FD2^-3= 1/8
 usw.

Die Zahl ist 0, wenn das dem MSB folgende Bit Null ist.

Beispiel 1:Zahl=1. Sie ist darstellbar durch 0,5*2^1=(0,5*2)*2^0, damit ergibt sich:
40 80 00 00
Beispiel 2:Zahl=-2,5. Sie ist darstellbar durch -(0,5+0,125)*2^2=-((0,5+0,125)*2)*2^1, damit ergibt sich für die Darstellung:
D0 00 00 01

Mit diesen Darstellungen ergeben sich die Grenzwerte:

Kleinste Zahl40 00 00 815.87747E-39
 
Größte Zahl7F FF FF 7F3.40283E+38

Fehlerbehandlung

Bei Bereichsüberschreitung der Zahlen, Wurzel aus einer negativen Zahl, Division durch Null und Zahlenüber- oder -unterlauf wird die interne Fehlerflag ‚FLPERR' auf den Wert TRUE (dezimal 255, hex FF) gesetzt. Außerdem wird bei einem Fehler das Carryflag der CPU gesetzt. Das Prüfen dieser Flag obliegt dem Programmierer. Im Speicherplatz ‚FLPERR+1' findet sich ein weiterer Code, der genauere Auskunft gibt:

CodeBedeutung
0Overflow
2Division durch Null
4Exponent erwartet
6Ziffer erwartet
8Zahl zu groß
10Aufruf Fehler

Formathinweise

Das folgende Beispiel veranschaulicht die Ausgabe mit der Routine FLFORM mit unterschiedlichen Parametern (_ entspricht einem Leerzeichen):

ZahlDezimalstellenNachkommastellenDarstellung
 123456789012
10062100.00
10082__100.00
23.45561__23.5
23.45542_2.34550E+01
23.45549__23

Bei der speziellen Formatausgabe (Akkumulator hält -1), bestimmt das Register C die Darstellungsform:
Register CDarstellung
1.. 7Die vollen 12 Zeichen werden dargestellt
8..12Es werden bis fünf Dezimalstellen dargestellt
ab 13Es werden entsprechende Leerzeichen vorangestellt

Am Beispiel der Zahl -1.23E+10 sei dies veranschaulicht (_ entspricht einem Leerzeichen):

Register CDarstellung
 12345678901234567890
7-1.23000E+10
8-1.2E+10
9-1.23E+10
10-1.230E+10
11-1.2300E+10
12-1.23000E+10
13_-1.23000E+10
14__-1.23000E+10

Wandlungshinweise

Für die Wandlungen der Fließkommazahlen in das Ganzzahlformat gibt es ja unterschiedliche Routinen. Es sei kurz im Bereich 12.0 bis 12.9 die unterschiedliche Art der Wandlung dargestellt. (Die Wandlung in eine Ganzzahl geschieht über ENTIER)

FLP     ROUND   ENTIER  TRUNC   FLP     ROUND   ENTIER  TRUNC
12.0    12      12      12      -12.0   -12     -12     -12
12.1    12      12      12      -12.1   -12     -13     -12
12.2    12      12      12      -12.2   -12     -13     -12
12.3    12      12      12      -12.3   -12     -13     -12
12.4    12      12      12      -12.4   -12     -13     -12
12.5    13      12      12      -12.5   -12     -13     -12
12.6    13      12      12      -12.6   -13     -13     -12
12.7    13      12      12      -12.7   -13     -13     -12
12.8    13      12      12      -12.8   -13     -13     -12
12.9    13      12      12      -12.9   -13     -13     -12