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 (using upper case letters A through F as "digits" when working with input bases greater than ten), with an optional decimal 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 may be invoked with the following command-line options:
-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.
If any command-line parameters remain after processing the above, these parameters are interpreted as the names of input files to be processed. A file name of - refers to the standard input stream. The standard input will processed if no script files or expressions are specified.

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 it 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.
*
Pops two values, multiplies them, and pushes the result. The number of fraction digits in the result depends on the current precision value and the number of fraction digits in the two arguments.
/
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.
%
Pops two values, computes the remainder of the division that the / command would do, and pushes that. The value computed is the same as that computed by the sequence 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.
|
Pops three values and computes a modular exponentiation. The first value popped is used as the reduction modulus; this value must be a non-zero number, and should be an integer. The second popped is used as the exponent; this value must be a non-negative number, and any fractional part of this exponent will be ignored. The third value popped is the base which gets exponentiated, which should be an integer. For small integers this is like the sequence Sm^Lm%, but, unlike ^, this command will work with arbitrarily large exponents.
v
Pops one value, computes its square root, and pushes that. The maximum of the precision value and the precision of the argument is used to determine the number of fraction digits in the result.
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
Reverses the order of (swaps) the top two values on the stack. (This can also be accomplished with the sequence SaSbLaLb.)
R
Pops the top-of-stack as an integer n. Cyclically rotates the top n items on the updated stack. If n is positive, then the rotation direction will make the topmost element the second-from top; if n is negative, then the rotation will make the topmost element the n-th element from the top. If the stack depth is less than n, then the entire stack is rotated (in the appropriate direction), without any error being reported.

Rejestry

dc udostępnia co najmniej 256256 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
Copy the value in register r and push it onto the stack. The value 0 is retrieved if the register is uninitialized. This does not alter the contents of 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 has a limited ability to operate on strings as well as on numbers; the only things you can do with strings are print them and execute them as macros (which means that the contents of the string are processed as dc commands). All registers and the stack can hold strings, and dc always knows whether any given object is a string or a number. Some commands such as arithmetic operations demand numbers as arguments and print errors if given strings. Other commands can accept either a number or a string; for example, the p command can accept either and prints the object according to its type.
[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
Similar but invokes the macro if the original top-of-stack is not greater than (less than or equal to) what was the second-to-top.
<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
Similar but invokes the macro if the original top-of-stack is not less than (greater than or equal to) what was the second-to-top.
=r
Podobnie, ale wywołuje makro, gdy obie zdjęte ze stosu liczby są równe.
!=r
Similar but invokes the macro if the two numbers popped are not equal.
?
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
Pops a value off the stack, calculates the number of decimal digits it has (or number of characters, if it is a string) and pushes that number. The digit count for a number does not include any leading zeros, even if those appear to the right of the radix point.
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

!
Will run the rest of the line as a system command. Note that parsing of the !<, !=, and !> commands take precedence, so if you want to run a command starting with <, =, or > you will need to add a space after the !.
#
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 has its own array associated with it. Thus 1 0:a 0Sa 2 0:a La 0;ap will print 1, because the 2 was stored in an instance of 0:a that was later popped.

PLIKI

~/.dcrc
The commands in this file will be executed when dc is first run.

BŁĘDY

Raporty o błędach można wysyłać do [email protected]

TŁUMACZENIE

Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Wojtek Kotwica <[email protected]>
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 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej [email protected]