Provided by: manpages-pl_20060617-1_all bug

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.