dc

DC(1)                       General Commands Manual                      DC(1)



NAZWA
       dc - kalkulator dowolnej precyzji

SKÅADNIA
       dc [-V] [--version] [-h] [--help] [-e wyraż-skryptowe] [--expression=
       wyraż-skryptowe] [-f plik-skryptu] [--file= plik-skryptu] [plik...]

OPIS
       Dokument ten opisuje dc w wersji 1.06, z listopada 2000.

       dc jest kalkulatorem pracujÄcym w odwrotnej notacji polskiej,
       obsÅugujÄcym arytmetykÄ nieograniczonej precyzji.  Pozwala również na
       definiowanie i wywoÅywanie makr.  Zwykle dc czyta ze standardowego
       wejÅcia. JeÅli użyto argumentów polecenia dc, to sÄ one traktowane
       jak nazwy plików. ZawartoÅÄ tych plików jest odczytywana i wykonywana
       przez dc przed odczytem standardowego wejÅcia.  Wszystkie zwykÅe wyniki
       kierowane sÄ na standardowe wyjÅcie; wszystkie komunikaty o bÅÄdach
       kierowane sÄ na standardowe wyjÅcie bÅÄdów.

       Kalkulator odwrotnej notacji polskiej przechowuje liczby na stosie.
       Wprowadzenie liczby odkÅada jÄ na stos.  Operacje arytmetyczne
       pobierajÄ argumenty ze stosu i odkÅadajÄ na nim wyniki.

       W celu wprowadzenia liczby do dc wpisujemy cyfry z opcjonalnÄ kropkÄ
       dziesiÄtnÄ. Nie jest rozpoznawana notacja wykÅadnicza.  LiczbÄ ujemnÄ
       poprzedzamy znakiem podkreÅlenia ``_''. Nie można posÅużyÄ siÄ w tym
       celu znakiem ``-'' (minus), gdyż jest to dwuargumentowy operator
       odejmowania.  Dwie kolejne liczby wprowadzamy oddzielajÄc je spacjami
       lub znakami nowej linii.  Nie majÄ one znaczenia jako polecenia.

OPCJE
       Dc można wywoÅywaÄ z nastÄpujÄcymi opcjami wiersza poleceÅ:

       -V

       --version
              Wypisuje numer wersji uruchomionego dc i informacjÄ o prawach
              autorskich, a nastÄpnie koÅczy dziaÅanie.

       -h

       --help Wypisuje komunikat o sposobie wywoÅania, podajÄc w skrócie
              opcje wiersza poleceÅ i adres, na który należy zgÅaszaÄ bÅÄdy,
              a nastÄpnie koÅczy dziaÅanie.

       -e skrypt

       --expression=skrypt
              Dodaje polecenia ze skryptu do zestawu poleceÅ, jakie majÄ byÄ
              wykonane podczas przetwarzania wejÅcia.

       -f plik-skryptu

       --file=plik-skryptu
              Dodaje polecenia zawarte w pliku-skryptu do zestawu poleceÅ,
              jakie majÄ byÄ wykonane podczas przetwarzania wejÅcia.

       Jeżeli po przetworzeniu powyższych opcji pozostanÄ jeszcze jakieÅ
       parametry wiersza poleceÅ, to sÄ one interpretowane jako nazwy plików
       wejÅciowych, które należy wykonaÄ.  Nazwa - odnosi siÄ do
       standardowego strumienia wejÅciowego.  JeÅli nie podano ani opcji -e
       ani żadnych plików, to polecenia do wykonania bÄdÄ czytane ze
       standardowego wejÅcia.

Polecenia wypisywania
       p      Wypisuje wartoÅÄ z wierzchoÅka stosu, bez jego zmiany. Po
              wartoÅci wypisywany jest znak nowej linii.

       n      Wypisuje wartoÅÄ z wierzchoÅka stosu, zdejmujÄc jÄ równoczeÅnie
              ze stosu.  Nie wypisuje po niej znaku nowej linii.  P Zdejmuje
              wartoÅÄ z wierzchoÅka stosu.  JeÅli jest to ÅaÅcuch, to jest on
              po prostu wypisywany bez koÅcowego znaku nowej linii. W
              przeciwnym razie jest to liczba, a czÄÅÄ caÅkowita jej wartoÅci
              bezwzglÄdnej wypisywana jest jako strumieÅ bajtów "o podstawie
              (UCHAR_MAX+1)". ZakÅadajÄc, że (UCHAR_MAX+1) wynosi 256 (jak to
              jest w wiÄkszoÅci maszyn o 8-bitowych bajtach), funkcjÄ tÄ
              realizuje także sekwencja KSK 0k1/ [_1*]sx d0>x
              [256~aPd0<x]dsxx sxLKk, z wyjÄtkiem skutku ubocznego, jakim jest
              nadpisanie wartoÅci z rejestru x.

       f      Wypisuje caÅÄ zawartoÅÄ stosu nie zmieniajÄc niczego.  Jest
              polecenie przydatne w sytuacji, gdy siÄ pogubiliÅmy lub chcemy
              siÄ zorientowaÄ, jaki byÅ efekt pewnych poleceÅ.

Arytmetyka
       +      Zdejmuje ze stosu dwie wartoÅci, dodaje je i odkÅada wynik na
              stos.  DokÅadnoÅÄ wyniku zależy wyÅÄcznie od wartoÅci
              argumentów i jest wystarczajÄco ÅcisÅa.

       -      Zdejmuje ze stosu dwie wartoÅci, odejmuje pierwszÄ zdjÄtÄ od
              drugiej i skÅada wynik ponownie na stos.

       *      Zdejmuje ze stosu dwie wartoÅci, mnoży je i odkÅada wynik na
              stos.  Liczba cyfr uÅamkowych wyniku jest kontrolowana przez
              aktualnÄ wartoÅÄ dokÅadnoÅci (patrz niżej) i liczby cyfr
              uÅamkowych mnożonych wartoÅci.

       /      Zdejmuje ze stosu dwie wartoÅci, dzieli drugÄ zdjÄtÄ przez
              pierwszÄ i odkÅada wynik ponownie na stos.  Liczba cyfr
              uÅamkowych wyniku okreÅlana jest przez wartoÅÄ dokÅadnoÅci.

       %      Zdejmuje ze stosu dwie wartoÅci, oblicza resztÄ z dzielenia,
              jakie byÅoby wykonane przez / i odkÅada wynik na stos.
              Obliczona wartoÅÄ jest tÄ samÄ, co otrzymana z sekwencji Sd dld/
              Ld*-.

       ~      Zdejmuje ze stosu dwie wartoÅci, dzieli drugÄ zdjÄtÄ przez
              pierwszÄ.  OdkÅada na stos iloraz, a nastÄpnie resztÄ z
              dzielenia.  Dzielenie wykonywane jest z liczbÄ cyfr uÅamkowych
              okreÅlonÄ wartoÅciÄ dokÅadnoÅci.  (FunkcjÄ tÄ może też
              speÅniaÄ sekwencja SdSn lnld/ LnLd%, z nieco odmiennym
              sprawdzaniem bÅÄdów.)

       ^      Zdejmuje ze stosu dwie wartoÅci i wykonuje potÄgowanie,
              posÅugujÄc siÄ pierwszÄ zdjÄtÄ jako wykÅadnikiem, zaÅ drugÄ jako
              podstawÄ potÄgowania.  UÅamkowa czÄÅÄ wykÅadnika jest
              ignorowana.  WartoÅÄ dokÅadnoÅci okreÅla liczbÄ cyfr uÅamkowych
              wyniku.

       |      Zdejmuje ze stosu trzy wartoÅci i oblicza potÄgowanie modulo [od
              tÅum: modular exponentiation == (a^b) mod c].
              Pierwsza ze zdjÄtych wartoÅci używana jest jako dzielnik
              operacji (reduction modulus).  WartoÅÄ ta musi byÄ niezerowa i
              powinna byÄ liczbÄ caÅkowitÄ.  Druga używana jest jako
              wykÅadnik i musi byÄ liczbÄ nieujemnÄ, a jej czÄÅÄ uÅamkowa
              zostanie zignorowana.  Trzecia z pobranych ze stosu wartoÅci
              okreÅla podstawÄ potÄgowania, powinna ona byÄ caÅkowita.  Dla
              maÅych liczb jest to zbliżone do sekwencji Sm^Lm%, ale, w
              odróżnieniu od ^, polecenie to dziaÅa z dowolnie dużymi
              wykÅadnikami.

       v      Zdejmuje ze stosu pojedynczÄ wartoÅÄ, oblicza jej pierwiastek
              kwadratowy i odkÅada go na stos.  WartoÅÄ dokÅadnoÅci okreÅla
              liczbÄ cyfr uÅamkowych wyniku.

       Na wiÄkszoÅÄ operacji arytmetycznych wpÅywa ``wartoÅÄ dokÅadnoÅci'',
       którÄ ustala siÄ za pomocÄ polecenia k.  DomyÅlnÄ wartoÅciÄ
       dokÅadnoÅci jest zero, co oznacza, że wszystkie dziaÅania arytmetyczne
       z wyjÄtkiem dodawania i odejmowania dajÄ wyniki caÅkowite.

       Operacja reszty % wymaga pewnego wyjaÅnienia: zastosowana do
       argumentów  ``a'' i ``b'' daje w wyniku ``a - (b * (a / b))'', gdzie
       ``a/b'' obliczane jest z bieżÄcÄ dokÅadnoÅciÄ.

Kontrola stosu
       c      CzyÅci stos, powoduje, że bÄdzie on pusty.

       d      Powiela wartoÅÄ na wierzchoÅku stosu, odkÅadajÄc na stos jej
              kopiÄ.  Zatem ``4d*p'' oblicza 4 podniesione do kwadratu i
              wypisuje wynik.

       r      Zamienia miejscami dwie górne wartoÅci na stosie.

Rejestry
       dc udostÄpnia 256 rejestrów pamiÄciowych, każdy nazwany pojedynczym
       znakiem. W rejestrze można przechowaÄ liczbÄ lub ÅaÅcuch znakowy i
       później je odtworzyÄ.

       sr     Zdejmuje wartoÅÄ z wierzchoÅka stosu i zapisuje w rejestrze r.

       lr     Kopiuje wartoÅÄ zawartÄ w rejestrze r i odkÅada jÄ na stos.  Nie
              zmienia to zawartoÅci r.

       Każdy z rejestrów posiada również swój wÅasny stos. BieżÄcÄ
       wartoÅciÄ rejestru jest wierzchoÅek stosu rejestru.

       Sr     Zdejmuje wartoÅÄ z wierzchoÅka stosu (gÅównego) i odkÅada jÄ na
              stosie rejestru r. Poprzednia wartoÅÄ rejestru staje siÄ
              niedostÄpna.

       Lr     Zdejmuje wartoÅÄ z wierzchoÅka stosu rejestru r i odkÅada jÄ na
              gÅównym stosie. Poprzednia wartoÅÄ stosu rejestru r, jeÅli byÅa
              takowa, jest teraz dostÄpna poprzez polecenie lr.

Parametry
       dc posiada trzy parametry kontrolujÄce jego pracÄ: dokÅadnoÅÄ, podstawÄ
       systemu pozycyjnego wejÅcia i podstawÄ wyjÅcia.  DokÅadnoÅÄ okreÅla
       liczbÄ cyfr dziesiÄtnych, jaka bÄdzie zachowana w wyniku wiÄkszoÅci
       operacji arytmetycznych.  Podstawa wejÅcia odpowiada za interpretacjÄ
       wprowadzanych liczb; wszystkie wprowadzane liczby używajÄ tej
       podstawy.  Podstawa wyjÅcia używana jest do wypisywania liczb.

       Podstawa wejÅcia i wyjÅcia sÄ odrÄbnymi parametrami; można spowodowaÄ,
       że bÄdÄ różne, co może byÄ użyteczne lub mylÄce.  Podstawa wejÅcia
       musi byÄ liczbÄ z zakresu od 2 do 16.  Podstawa wyjÅcia musi wynosiÄ co
       najmniej 2.  DokÅadnoÅÄ musi byÄ równa zeru lub wiÄksza. DokÅadnoÅÄ
       zawsze okreÅlana jest jako liczba cyfr dziesiÄtnych, niezależnie od
       bieżÄcej podstawy wejÅcia czy wyjÅcia.

       i      Zdejmuje wartoÅÄ z wierzchoÅka stosu i posÅuguje siÄ niÄ do
              ustawienia podstawy wejÅcia.

       o      Zdejmuje wartoÅÄ z wierzchoÅka stosu i posÅuguje siÄ niÄ do
              ustawienia podstawy wyjÅcia.

       k      Zdejmuje wartoÅÄ z wierzchoÅka stosu i posÅuguje siÄ niÄ do
              ustawienia dokÅadnoÅci.

       I      OdkÅada bieżÄcÄ wartoÅÄ podstawy wejÅcia na stosie.

       O      OdkÅada bieżÄcÄ wartoÅÄ podstawy wyjÅcia na stosie.

       K      OdkÅada bieżÄcÄ dokÅadnoÅÄ na stosie.

ÅaÅcuchy znakowe
       dc oprócz pracy z liczbami może też dziaÅaÄ na ÅaÅcuchach znakowych.
       ÅaÅcuchy można jedynie wypisywaÄ i wykonywaÄ jako makra (co oznacza,
       że zawartoÅÄ ÅaÅcucha przetwarzana jest jako polecenia dc).  Stos i
       wszystkie rejestry mogÄ przechowywaÄ ÅaÅcuchy, a dc zawsze wie, czy
       dany obiekt jest ÅaÅcuchem czy liczbÄ.  Niektóre z poleceÅ, jak np.
       operacje arytmetyczne, wymagajÄ liczb jako swych argumentów i
       wyÅwietlajÄ bÅÄdy, jeÅli dostarczono im ÅaÅcuch.  Inne akceptujÄ
       zarówno liczby, jak i ÅaÅcuchy znakowe. Na przykÅad, polecenie p
       akceptuje oba rodzaje argumentów i wypisuje obiekt stosownie do jego
       typu.

       [znaki]
              Tworzy ÅaÅcuch zawierajÄcy znaki (zawarte pomiÄdzy nawiasami
              kwadratowymi [ i ]) i odkÅada go na stos.  Na przykÅad, [foo]P
              wypisuje znaki foo (bez zakoÅczenia znakiem nowej linii).

       a      Zdejmowany jest wierzchoÅek stosu.  Jeżeli jest to liczba, to
              mÅodszy bajt (low-order byte) tej liczby zamieniany jest na
              ÅaÅcuch i odkÅadany na stos. W przeciwnym przypadku, wierzchoÅek
              stosu byÅ ÅaÅcuchem, a z powrotem na stos odkÅadany jest
              pierwszy znak tego ÅaÅcucha.

       x      Zdejmuje wartoÅÄ ze stosu i wykonuje jÄ jako makro. Zwykle
              powinien to byÄ ÅaÅcuch znakowy. Jeżeli jest to liczba, to
              zostanie po prostu zwrócona na stos.  Na przykÅad, [1p]x
              wykonuje makro 1p, które odkÅada 1 na stosie i wypisuje 1 w
              osobnym wierszu.

       Makra sÄ najczÄÅciej przechowywane w rejestrach: [1p]sa skÅaduje makro
       do wypisania 1 w rejestrze a, zaÅ lax wywoÅuje to makro.

       >r     Zdejmuje dwie wartoÅci ze stosu i porównuje je, zakÅadajÄc, że
              sÄ one liczbami, wykonujÄc zawartoÅÄ rejestru r jako makro,
              jeÅli pierwotny wierzchoÅek stosu jest wiÄkszy.  Tak wiÄc, 1 2>a
              wywoÅa zawartoÅÄ rejestru a zaÅ 2 1>a nie wywoÅa.

       !>r    Podobnie, ale wywoÅuje makro jeÅli pierwotny wierzchoÅek stosu
              nie jest wiÄkszy (jest mniejszy bÄdź równy) od liczby
              wystÄpujÄcej pod nim.

       <r     Podobnie, ale wywoÅuje makro jeÅli pierwotny wierzchoÅek stosu
              jest mniejszy od liczby wystÄpujÄcej pod nim.  !<r Podobnie, ale
              wywoÅuje makro jeÅli pierwotny wierzchoÅek stosu nie jest
              mniejszy (jest wiÄkszy bÄdź równy) od liczby wystÄpujÄcej pod
              nim.

       =r     Podobnie, ale wywoÅuje makro, gdy obie zdjÄte ze stosu liczby sÄ
              równe.

       !=r    Podobnie, ale wywoÅuje makro, gdy obie zdjÄte ze stosu liczby
              nie sÄ równe.

       ?      Czyta wiersz z terminala i wykonuje go. Polecenie to umożliwia
              makru pobieranie danych od użytkownika.

       q      powoduje zakoÅczenie pracy makra i makra, z którego byÅo ono
              wywoÅane.  Polecenie to wywoÅane na najwyższym poziomie lub z
              makra wywoÅanego bezpoÅrednio z najwyższego poziomu spowoduje
              zakoÅczenie pracy dc.

       Q      Zdejmuje ze stosu wartoÅÄ i używa jej jako liczby poziomów
              wykonania makr, jakie majÄ zostaÄ zakoÅczone.  Tak wiÄc, 3Q
              koÅczy pracÄ trzech poziomów makr.  Polecenie Q nigdy nie
              powoduje zakoÅczenia pracy dc.

Informacja o stanie
       Z      Zdejmuje wartoÅÄ ze stosu, oblicza liczbÄ jej cyfr (lub liczbÄ
              znaków, jeÅli jest to ÅaÅcuch) i odkÅada tÄ liczbÄ na stos.

       X      Zdejmuje wartoÅÄ ze stosu, oblicza liczbÄ jej cyfr uÅamkowych i
              odkÅada tÄ liczbÄ na stos. Dla ÅaÅcuchów wartoÅciÄ odkÅadanÄ na
              stos jest 0.

       z      OdkÅada na stos bieżÄcÄ wysokoÅÄ stosu: liczbÄ obiektów na
              stosie przed wykonaniem polecenia z.

Różne
       !      Uruchamia resztÄ wiersza jako polecenie systemu.  Zauważ, że
              pierwszeÅstwo w analizie skÅadni majÄ polecenia !<, != i !>,
              wiÄc jeÅli chcemy uruchomiÄ polecenie systemu zaczynajÄce siÄ od
              <, > lub =, to po ! musimy dodaÄ odstÄp.

       #      Interpretuje resztÄ wiersza jako komentarz.

       :r     Zdejmuje ze stosu dwie górne wartoÅci. WartoÅÄ, która byÅa
              drugÄ od góry stosu zostanie zachowana w tablicy r,
              indeksowanej wartoÅciÄ byÅego wierzchoÅka stosu.

       ;r     Zdejmuje wierzchoÅek stosu i posÅuguje siÄ nim jako indeksem
              tablicy r.  Wybrana w ten sposób wartoÅÄ jest nastÄpnie
              odkÅadana na stos.  Zauważ, że każda ze skÅadowanych na
              stosie instancji rejestru ma swojÄ wÅasnÄ, skojarzonÄ z niÄ
              tablicÄ.  Zatem, 1 0:a 0Sa 2 0:a La 0;ap wypisze 1, gdyż 2
              zostaÅo zapamiÄtane w instancji 0:a, która zostaÅa później
              odÅożona na stos.

UWAGI
       Operacje tablicowe : oraz ; sÄ zwykle używane wyÅÄcznie przez
       tradycyjne implementacje bc.  (Program bc w wersji GNU jest
       samowystarczalny i nie potrzebuje dc by dziaÅaÄ.)

BÅÄDY
       BÅÄdy proszÄ zgÅaszaÄ (w jÄz.angielskim) na adres bug-dc@gnu.org.



Projekt GNU                       1997-03-25                             DC(1)