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¶
Uwaga! To tłumaczenie może być nieaktualne!
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.
- 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.
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
Tłumaczenia Manuali i
może nie być aktualne. W razie
zauważenia różnic między powyższym opisem a
rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie się z oryginalną (angielską) wersją strony
podręcznika za pomocą polecenia:
- man --locale=C 1 dc
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.