Typ stałopozycyjny – typ danych reprezentujący w określonym języku programowania, liczbę wymierną o ustalonym mianowniku. Dane stałopozycyjne składają się z części całkowitej i ewentualnie z części ułamkowej. Liczby stałopozycyjne posiadają określoną precyzję. Wartości stałopozycyjne reprezentowane są w kodzie źródłowym za pomocą literałów stałopozycyjnychMichael Marcotty, Henry Ledgord, W kręgu języków programowania, tłumaczenie: Krystyna Jerzykiewicz, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Biblioteka Inżynierii Oprogramowania, ..

Deklarując daną określonego typu stałopozycyjnego, należy określić dwie wartości, umożliwiające właściwą interpretację danej i ustalenie położenia znaku dziesiętnego rozdzielającego część całkowitą od ułamkowej. Stosowane mogą być następujące rozwiązania: liczba cyfr lub rozmiar całej danej stałopozycyjnej, oraz części ułamkowej, liczba cyfr lub rozmiar części całkowitej, oraz części ułamkowej.

W wariancie pierwszym nie podaje się wprost liczby cyfr lub rozmiaru przeznaczonego do pamiętania części całkowitej, lecz wynika ona z różnicy pomiędzy wielkością określoną dla całej danej a wielkością określoną dla części ułamkowej. Takie rozwiązanie stosowane jest między innymi w języku PL/I, w którym deklaracja danej stałopozycyjnej ma postaćJan Bielecki, Rozszerzony PL/I i JCL w systemie OS/RIAD, Państwowe Wydawnictwo Naukowe, Warszawa 1986, Seria: Biblioteka Informatyki, .

FIXED <[DEC] | BIN>(c,u) gdzie: c – liczba cyfr całej danej (a więc części całkowitej i ułamkowej), u – liczba cyfr przypadających na część ułamkową, w szczególności może to być wartość zero, DEC – liczby dziesiętne, przyjmowane domyślnie, BIN – liczby binarne.

W różnych systemach komputerowych, mogą być stosowane różne reprezentacje liczb, tzn. może być stosowany różny sposób ich pamiętania. W PL/1 stosowano rozwiązanie oparte na spakowanym kodzie BCD, w którym rozmiar pamięci zajmowanej przez daną typu stałopozycyjnego można obliczyć ze wzoru:

do wartości c dodać należy 1 na znak liczby +/−, ponieważ jeden znak zajmuje pół słowa (dla maszyn o bajtowym słowie), to należy dla c+1 nieparzystego dodać bajt w którym jedno półsłowo pozostaje niewykorzystane.

Taka reprezentacja liczb stałopozycyjnych, bez odniesienia do deklaracji, w żaden sposób nie zapewnia możliwości właściwej interpretacji danej wprost z jej zapisu w pamięci, gdyż nieznane jest położenie znaku rozdzielającego część całkowitą i ułamkową, które wynika tylko z deklaracji. Nie ma tego problemu dla literałów, odpowiedni atrybut wynika wprost z zapisu literału. Dla danych stałopozycyjnych o części ułamkowej równej zero, przyjmuje się interpretację jak dla liczb typu całkowitego, np. w PL/1 nie ma odrębnego typu całkowitego, a dane całkowite reprezentowane są przez dane stałopozycyjne, zadeklarowane następująco: FIXED <[DEC] | BIN>(c,0)

W języku PL/1 wprowadzono jeszcze jedną konstrukcję, w której u (liczba cyfr ułamkowych), możne przyjmować wartość ujemną w deklaracji. W tym przypadku przyjmuje się, że jest to dana stałopozycyjna z zerową liczbą cyfr ułamkowych (utożsamiana z daną całkowitą), ale z odpowiednią ilością nie reprezentowanych zer (tzn. z zerami nie zapisanymi w obszarze danej zapisanej w pamięci), lecz „dodawanymi” (dołączanymi) na końcu zapisu domyślnie przez implementację języka na podstawie deklaracji. Przykład: DCL A FIXED DEC(4,-3) INIT(-10000);

W pamięci, w obszarze zmiennej A, będą przechowywane cyfry „010-”, a trzy zera końcowe wartości nadanej w inicjalizacji zmiennej będą wynikać jedynie z atrybutów zmiennej A, przypisanych w deklaracji.

W języku Cobol dane stałopozycyjne opisywane są odpowiednimi formatami w deklaracji frazą PICTUREEugeniusz Kurzydrem, Andrzej Macieliński, Urszula Szmidt, Eugeniusz Więcek, COBOL. Język programowania., Państwowe Wydawnictwo Ekonomiczne, Warszawa 1978, wydanie drugie., np. PICTURE 999V99

umożliwiającą zapis liczb stałopozycyjnych o maksymalnej długości części całkowitej 3 cyfr i maksymalnej długości części ułamkowej 2 cyfr.

Typy stałopozycyjne stosowane były w takich językach jak m.in.John E. Nicholls, Struktura języków programowania, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Informatyka, . PL/I COBOL Flowmatic Commercial Translator Fact.

Pewnym rodzajem typu stałopozycyjnego, o z góry narzuconej przez implementację strukturze – precyzji – jest typ Currency, dostępny w DelphiDelphi na Wikibooks..

Zobacz też typ danych typ całkowity typ zmiennoprzecinkowy

Przypisy

Kategoria:Typy danych