W sterownikach PCD liczby zmiennoprzecinkowe mogą być przechowywane w dwóch formatach: IEEE 754 oraz Motorola Fast Floating Point (FFP).
Obsługa formatów przez sterowniki SBC
Format Motorola FFP jest formatem, który był w sterownikach firmy Saia Burgess Controls „od zawsze”. Format IEEE 754 został wprowadzony w sterownikach z systemem NT:
PCS1 | PCD1.M1xx PCD2.M1xx PCD2.M480 |
PCD1.Mxxx0 PCD2.Mxxx0 |
PCD3 | |
Motorola FFP | Tak | Tak | Tak | Tak |
IEEE 754 | Nie | Nie | Tak | Tak |
Format IEEE 754
Do przechowania liczby wykorzystuje się 32 bity – 1 bit znaku (S), 8 bitów wykładnika (E) i 23 bity mantysy (M):
SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
Interpretacja liczby:
Liczba = (-1)S * 2E-127 * (M/0x800000)
Reprezentując podzielnik mantysy jako liczbę całkowitą:
Liczba = (-1)S * 2E-127 * (M/8388608)
IEEE 754 Double (liczba zmiennoprzecinkowa podwójnej precyzji)
Do przechowania liczby wykorzystuje się 64 bity – 1 bit znaku (S), 11 bitów wykładnika (E) i 52 bitów mantysy (M):
SEEE EEEE EEEE MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM
IEEE 754 w sterownikach SBC
W sterownikach SBC liczby w formacie IEEE są przechowywane w rejestrach (R) i na stronach Fupla reprezentowane są kolorem niebieskim (jak liczby całkowite).
Liczby podwójnej precyzji są przechowywane w dwóch sąsiednich rejestrach (R).
Format Motorola FFP
Do przechowywania liczby wykorzystuje się 32 bity – 1 bit znaku (S), 7 bitów wykładnika (E) i 24 bity mantysy (M):
MMMM MMMM MMMM MMMM MMMM MMMM SEEE EEEE
Interpretacja liczby:
Liczba = (-1)S * 2E-64 * M/0x1000000
Reprezentując podzielnik mantysy jako liczbę dziesiętną:
Liczba = (-1)S * 2E-64 * M/268435456
Motorola FFP w sterownikach SBC
W sterownikach SBC liczby w formacie Motorola FFP są przechowywane w rejestrach zmiennoprzecinkowych (RF) i na stronach Fupla reprezentowane są kolorem żółtym.
Przykłady
Liczba | Zapis w IEEE 754 | Zapis w Motorola FFP |
1,5 | 0011 1111 1100 0000 0000 0000 0000 0000 | 1100 0000 0000 0000 0000 0000 0100 0001 |
-1,5 | 1011 1111 1100 0000 0000 0000 0000 0000 | 1100 0000 0000 0000 0000 0000 1100 0001 |
425,83 | 0100 0011 1101 0100 1110 1010 0011 1101 | 1101 0100 1110 1010 0011 1101 0100 1001 |
0,034 | 0011 1101 0000 1011 0100 0011 1001 0110 | 1000 1011 0100 0011 1001 0110 0011 1100 |
Konwersja pomiędzy formatami
Konwersja pomiędzy formatami możliwa jest przy wykorzystaniu bloków funkcyjnych Fupla:
Do konwersji pomiędzy formatami w Liście Instrukcji (IL) można skorzystać z instrukcji:
Instrukcja | Działanie | Uwagi |
IFP | Liczba całk. -> FFP | |
FPI | FFP -> Liczba całk. | |
EIFP | Liczba całk.-> IEEE | Tylko w systemach NT |
EFPI | IEEE -> Liczba całk. | Tylko w systemach NT |
EFPD | IEEE Single -> IEEE Double | Tylko w systemach NT |
DFPE | IEEE Double -> IEEE Single | Tylko w systemach NT |
Szczegółowy opis wykorzystania powyższych bloczków i instrukcji IL wraz z przykładami znajduje się w pomocy do Fupli i w pomocy do Listy Instrukcji w PG5.