Die Umsetzung der Beschreibung von dieser Seite:
https://onestepcode.com/float-to-int-c/fuehrt zu folgendem Testprogramm:
//MD9 ist der IEEE754 Eingangsparameter
MD9 := MD9;
M1 := (MD9 < 0); //Vorzeichen-Check: M1 wird TRUE fuer negative Werte
IF M1
THEN
//Vorzeichen loeschen
BV02 (
EN := ,
I1 := MD9,
I2 := 16#7FFF_FFFF,
ZE => ,
QV => MD10
);
ELSE
MD10 := MD9;
END_IF;
MD12 := MD10; //MD12 skal inneholde eksponenten \ MD12 enthaelt Exponenten
FOR MD11 := 0 TO 22 DO
MD12 := MD12 / 2; //entspricht shift-right um 23 bits
END_FOR;
MD12 := MD12;
IF (MD12 = 16#FF) //Sonderfall: alle Exponenten-bits sind gesestzt
THEN
MD16 := 16#8000_0000; //Ausgabe des kleinst moeglichen integerwertes
ELSE
IF (MD12 = 0) //Ein Exponent gleich 0 bedeutet ein Wert nahe Null
THEN
MD16 := 0; //da geben wir 0 aus
ELSE //Hier haben wir auf jeden fall einen "gueltigen" Exponent
MD12 := MD12 -127; //BIAS von 127 abziehen, resultat ergibt den wirkliche Exponentwert
IF MD12 < 0 //Bei negativen Exponenten ist das Ergebnis immer nahe Null
OR MD12 > 30 //Exponent groesser 30 kann in einer 32-bit Integer nicht dargestellt werden
THEN
MD16 := 0;
ELSE //Positiver Exponent
MD13 := 1; //MD13 = 1 << MD12
FOR MD11 := 1 TO MD12 DO
MD13 := MD13 *2;
END_FOR;
MD12 := MD12;
MD13 := MD13;
BV01 (
EN := ,
I1 := MD9, //Ausgangsdaten
I2 := 16#7FFFFF, //Maske ueber bits 0..22
ZE => ,
QV =>
);
MD14 := BV01QV; //MD14 enthaelt die Mantisse, also Bit 0..22
IF MD12 < 23
THEN
FOR MD11 := 1 TO (23 - MD12) DO
MD14 := MD14 / 2;
END_FOR;
ELSE
FOR MD11 := 1 TO (MD12 - 23) DO
MD14 := MD14 * 2;
END_FOR;
END_IF;
MD13 := MD13;
MD14 := MD14;
MD16 := MD13 + MD14;
END_IF;
IF M1 //wir hatten ein negatives Vorzeichen
THEN //Da berichtigen wir den Ausgangswert entsprechend
MD16 := MD16 * (-1);
END_IF;
END_IF;
END_IF;
MD16 := MD16; //Resultat
Hier werden einfach alle Nachkommastellen abgeschnitten, um also einige Nachkommastellen zu "retten" muss man noch ein bisschen weiter ueberlegen..