Typ stałopozycyjny

Typ stałopozycyjnytyp 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łopozycyjnych[1].

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ć[2][3]

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ą PICTURE[4], 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.[5]

Pewnym rodzajem typu stałopozycyjnego, o z góry narzuconej przez implementację strukturze – precyzji – jest typ Currency, dostępny w Delphi[6].

Zobacz też edytuj

Przypisy edytuj

  1. Michael Marcotty, Henry Ledgord, W kręgu języków programowania, tłumaczenie: Krystyna Jerzykiewicz, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Biblioteka Inżynierii Oprogramowania, ISBN 83-204-1342-7.
  2. Jan Bielecki, Rozszerzony PL/I i JCL w systemie OS/RIAD, Państwowe Wydawnictwo Naukowe, Warszawa 1986, Seria: Biblioteka Informatyki, ISBN 83-01-06146-4.
  3. Programowanie w języku PL/1 OS JS, M.I. Auguston, Anna Ignatowicz (tłum.), Warszawa: Państwowe Wydawnictwo Naukowe, 1988, ISBN 83-01-07463-9, OCLC 749883472.
  4. Eugeniusz Kurzydrem, Andrzej Macieliński, Urszula Szmidt, Eugeniusz Więcek, COBOL. Język programowania., Państwowe Wydawnictwo Ekonomiczne, Warszawa 1978, wydanie drugie.
  5. John E. Nicholls, Struktura języków programowania, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Informatyka, ISBN 83-204-0246-8.
  6. Delphi na Wikibooks.