C Control I Unit-M 2.0 BASIC 5 Vdc Inputs / outputs 16 x digital I/Os/8 x analog or digital I/Os/2 x analogue outputs (s 198822 Datenbogen
Produktcode
198822
DAS FLOATING POINT MODUL (FPM)
EINFÜHRUNG
Das Betriebssystem der M ADV Units basiert auf dem Betriebssystem 2.05 einer herkömmlichen M 2.0, ist
aber mit einem 32 Bit Floating Point Module im Betriebssystem und einem erweiterten BASIC
Programmspeicher (22kB) sowie einem größeren Variablenspeicher ausgestattet. Allerdings gibt es hier eine
kleine Einschränkung:
Der Variablenspeicher ist, wie bisher, ohne Einschränkungen bis 140 Bytes zu nutzen. Bis zu 240 Bytes
lassen sich nutzen, wenn die Datei Funktion PRINT# x nicht benutzt wird, oder so benutzt wird (z.B. für
temporäre Variablen) dass es nicht stört wenn der Variablenbereich 140-240 bei Verwendung von PRINT#
gelöscht wird.
Das gilt auch für die Funktion PUT_FLOAT(myFloat) in der FLOATMATH.BLIB. Sie benutzt eine modifizierte
Version von PRINT#
aber mit einem 32 Bit Floating Point Module im Betriebssystem und einem erweiterten BASIC
Programmspeicher (22kB) sowie einem größeren Variablenspeicher ausgestattet. Allerdings gibt es hier eine
kleine Einschränkung:
Der Variablenspeicher ist, wie bisher, ohne Einschränkungen bis 140 Bytes zu nutzen. Bis zu 240 Bytes
lassen sich nutzen, wenn die Datei Funktion PRINT# x nicht benutzt wird, oder so benutzt wird (z.B. für
temporäre Variablen) dass es nicht stört wenn der Variablenbereich 140-240 bei Verwendung von PRINT#
gelöscht wird.
Das gilt auch für die Funktion PUT_FLOAT(myFloat) in der FLOATMATH.BLIB. Sie benutzt eine modifizierte
Version von PRINT#
Ergänzungen in der Library
Nicht alle Funktionen der Gleitkommaarithmetik sind auf Betriebssystem-Ebene installiert. Ein Teil davon, wie
z.B. der LN (der natürliche Logarithmus) sind als Library auf BASIC Ebene installiert, da hier oft die
Rechengenauigkeit gegen die Rechenzeit abgewogen wird. Gleiches gilt für die Eingaberoutine von
Gleitkommazahlen über Tastatur. Auch hier hat der Anwender die Möglichkeit diese Funktionen seinen
individuellen Bedürfnissen anzupassen.
Nicht alle Funktionen der Gleitkommaarithmetik sind auf Betriebssystem-Ebene installiert. Ein Teil davon, wie
z.B. der LN (der natürliche Logarithmus) sind als Library auf BASIC Ebene installiert, da hier oft die
Rechengenauigkeit gegen die Rechenzeit abgewogen wird. Gleiches gilt für die Eingaberoutine von
Gleitkommazahlen über Tastatur. Auch hier hat der Anwender die Möglichkeit diese Funktionen seinen
individuellen Bedürfnissen anzupassen.
Einschränkungen:
Die Implementierung eine Gleitkommaarithmetik auf einer so kleinen Maschine, wie es die Unit ADV ist,
erfordert zwar bei der Funktionalität keine Einschränkungen wohl aber bei der Programmierung selbst.
Gemeint sind hier z.B. grundsätzliche Überlegungen bei der Programmierung von Termen hinsichtlich des
Stack-Bedarfes dieser Ausdrücke. Das gilt auch allgemein bei der Mischung verschiedener Datentypen, die
oftmals schon vom Compiler oder im Betriebssystem umgewandelt werden (ohne das es der Programmierer
merkt), was in anderen Umgebungen komplikationslos ist. Das ist hier nicht möglich und der Programmierer
ist selbst dafür verantwortlich die gegebenen Rahmenbedingungen sorgfältig einzuhalten.
Die Implementierung eine Gleitkommaarithmetik auf einer so kleinen Maschine, wie es die Unit ADV ist,
erfordert zwar bei der Funktionalität keine Einschränkungen wohl aber bei der Programmierung selbst.
Gemeint sind hier z.B. grundsätzliche Überlegungen bei der Programmierung von Termen hinsichtlich des
Stack-Bedarfes dieser Ausdrücke. Das gilt auch allgemein bei der Mischung verschiedener Datentypen, die
oftmals schon vom Compiler oder im Betriebssystem umgewandelt werden (ohne das es der Programmierer
merkt), was in anderen Umgebungen komplikationslos ist. Das ist hier nicht möglich und der Programmierer
ist selbst dafür verantwortlich die gegebenen Rahmenbedingungen sorgfältig einzuhalten.
Der Compiler gibt hier keine Hinweise bzw. Fehlermeldungen. Der Anwender muss selbst darauf achten. Die
Folgen solcher Fehler sind in der Regel unerklärlich falsche Rechenergebnisse und auch Programmabstürze
als Folge von Stack-Fehlern.
Folgen solcher Fehler sind in der Regel unerklärlich falsche Rechenergebnisse und auch Programmabstürze
als Folge von Stack-Fehlern.
Interne Darstellung
Während die BASIC Steuercomputer bislang mit den, auch von Laien zu überschauenden Datentypen BYTE
und WORD ausgekommen ist, erfordert die Darstellung einer Fliesskommazahl einen weiteren Datentyp
FLOAT.
Dieser Datentyp besteht aus einem Byte Exponent und 3 Byte Mantisse mit Vorzeichen, also 32Bit.
Für die interne Darstellung einer Gleitkommazahl gilt folgende Spezifikation:
Während die BASIC Steuercomputer bislang mit den, auch von Laien zu überschauenden Datentypen BYTE
und WORD ausgekommen ist, erfordert die Darstellung einer Fliesskommazahl einen weiteren Datentyp
FLOAT.
Dieser Datentyp besteht aus einem Byte Exponent und 3 Byte Mantisse mit Vorzeichen, also 32Bit.
Für die interne Darstellung einer Gleitkommazahl gilt folgende Spezifikation:
1) Bias $80
2) Normiert -> Mantissa MSB immer 1
3) Darstellung der Mantissen mit "Mantissa hidden sign bit"
2) Normiert -> Mantissa MSB immer 1
3) Darstellung der Mantissen mit "Mantissa hidden sign bit"
Die Darstellung mit Mantissa hidden sign bit ist leicht verständlich wenn man sich die Darstellung der Zahl
+PI und -Pi ansieht:
+PI und -Pi ansieht:
3.1415927 82 49 0F DB
-3.1415927 82 C9 0F DB
-3.1415927 82 C9 0F DB
Das MSBit im 2.Byte (49 u. C9) ist Vorzeichen der Mantisse Weil wegen der Normierung das MSB immer
als 1 angenommen wird, kann man es als Vorzeichen verwenden.
als 1 angenommen wird, kann man es als Vorzeichen verwenden.
49 0F DB
ist Positiv (MSBit =0) die FP-Routine macht dann daraus C9 0F DB und setzt intern ein positiv FLAG
ist Positiv (MSBit =0) die FP-Routine macht dann daraus C9 0F DB und setzt intern ein positiv FLAG
C9 0F DB
ist Negativ (MSBit =1) die FP-Routine belässt es bei C9 0F DB und setzt intern ein negativ FLAG.
ist Negativ (MSBit =1) die FP-Routine belässt es bei C9 0F DB und setzt intern ein negativ FLAG.
4