dc(1)

NAZWA
dc - kalkulator dowolnej precyzji

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

OPIS

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.

To enter a number in dc, type the digits 0 to 9 and A through F to represent the values zero through fifteen, (regardless of the current input radix), and optionally including a single radix point. Exponential notation is not supported. To enter a negative number, begin the number with “_”. “-” cannot be used for this, as it is a binary operator for subtraction instead. To enter two numbers in succession, separate them with spaces or newlines. These have no meaning as commands.

OPCJE
dc można wywołać 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.

--max-recursion=depth
    Limit recursion to a depth of at most depth. (Mainly useful for debugging.)

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 plików skryptów ani żadnych wyrażeń, 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   Pops off the value on top of the stack. If it is a string, it is simply printed without a trailing newline. Otherwise it is a number, and the integer portion of its absolute value is printed out as a "base (UCHAR_MAX+1)" byte stream. Assuming that (UCHAR_MAX+1) is 256 (as it is on most machines with 8-bit bytes), the sequence KSK0k1/_1Ss [ls*]Sxd0>x [256~Ssd0<x]dsxxsx[q]Sq[Lsd0>qaPlxx] dsxxsx0sqLqsxLxLK+k could also accomplish this function. (Much of the complexity of the above native-dc code is due to the ~ computing the characters backwards, and the desire to ensure that all registers wind up back in their original states.)

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 zależy od aktualnej wartość dokładności i liczby cyfr ułamkowych w obu argumentach.

/   Pops two values, divides the second one popped by the first one popped, and pushes the result. The number of fraction digits is specified by the precision value.

%   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*-.

~   Pops two values, divides the second one popped by the first one popped. The quotient is pushed first, and the remainder is pushed next. The number of fraction digits used in the division is specified by the precision value. (The sequence SdSn lnld/ LnLd% could also accomplish this function, with slightly different error checking.)

^   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. Maksymalna wartość dokładności i dokładności argumentu służy do określenia liczby 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.

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 (można to uczynić również sekwencją SaSbLaLb).

R   Zdejmuje z wierzchołka stosu liczbę n. Cyklicznie rotuje n elementów z wierzchołka stosu na zaktualizowany stos. Jeśli n jest dodatnie, kierunek rotacji spowoduje, że najwyższy element stosu stanie się drugim elementem, jeśli n jest ujemne, to kierunek rotacji spowoduje, że najwyższym elementem stosu stanie się n-ty element licząc od góry stosu. Jeśli stos ma głębokość mniejszą niż n, to cały stos jest rotowany (w odpowiednim kierunku) bez zgłaszania błędu.

Rejestry

dc udostępnia co najmniej 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. Jeśli rejestr jest niezainicjowany, pobierana jest wartość 0. 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ć, w ograniczonym zakresie, 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.

    Note: this command is being deprecated; see dc.info for details. If you use the a command and think it should remain a part of GNU dc, file a bug report requesting its retention.

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 mniejszy (jest większy bądź równy) 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 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 dziesiętnych (lub liczbę znaków, jeśli jest to łańcuch) i odkłada tę liczbę na stos. Liczba cyfr liczby nie obejmuje początkowych zer, w tym jedynego zera przed kropką oddzielającą część całkowitą od ułamkowej.

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

!   Wykona resztę wiersza jako polecenie systemowe. Proszę zauważyć, że przetwarzanie poleceń !<, != i !> ma pierwszeństwo, dlatego jeśli chce się wykonać polecenie zaczynające się od <, = lub >, konieczne jest dodanie spacji po znaku !.

#   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.

Note that each stacked instance of a register consists of both its simple scalar value (whether a number or a string) and an array of the same name. Thus 1 0:x 0Sx 2 0:x Lx 0;xp will print 1, because the 2 was stored at index 0 in an instance of the array x which was later popped, re-exposing the instance of x that is holding a 1 at index 0.

ZMIENNE ŚRODOWISKOWE

DC_LINE_LENGTH
    Determines the column at which numeric output is split; the default value is 70. If set to “0” then line-splitting is disabled and each output line will be as long as necessary to represent the number.

DC_PROMPT
    Sets a prompt to use when dc is expecting interactive input on stdin.

USTERKI

Raporty o błędach można wysyłać do bug-dc@gnu.org

ZOBACZ TAKŻE
More complete documentation is available in dc.info, which may (depending on your local installation) be available by invoking “info dc”.

TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Wojtek Kotwica <wkotwica@post.pl> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 (https://www.gnu.org/licenses/gpl-3.0.html) lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.