dc

Klucze: linux ; 2006-08-05 16:31:13

Wielu młodych linuksowców przynajmniej na początku czuje niechęć do konsoli i to nie jest nic nadzwyczajnego. Większości to przechodzi - tzn. po pewnym czasie przyzwyczajają się do pracy z linią poleceń, ale nie wszystkim a także nie do końca. Jednak niewielu wie o takim fantastycznym poleceniu o nazwie 'dc', o kalkulatorze dostarczanym praktycznie z każdą dystrybucją. Tym wszystkim, którzy jeszcze o tym nie słyszeli zaprezentuję to genialne narzędzie.

dc jest to kalkulator działający w trybie odwrotnej notacji polskiej. potrafi on przybliżać wyniki do 2147483647 miejsc po przecinku [dwóch miliardów!], pod warunkiem, że ma się wystarczającą ilość pamięci.

Może on działać w dwóch trybach: albo w trybie interaktywnym, gdzie znak po znaku jest interpretowany i na bieżąco wykonywany, albo w trybie podawania instrukcji przez parametr - gdy wykona się go z parametrem '-e' to następny parametr to będzie lista instrukcji, która się wykona i program się zakończy. Pierwszy tryb może służyć do dłuższych obliczeń, drugi do prostszych.

Ale jak on działa? Ten kalkulator posiada coś takiego jak 'stos' liczb. Stos to tak jak stos talerzy - można brać tylko te z góry i kłaść tylko na górę. Pomijamy możliwość wzięcia kilku talerzy na raz. Każdy 'talerz' to jest liczba. Gdy wykonujemy operacje, to zabieramy pewną ilość liczb z góry stosu i wykorzystujemy je jako 'operandy', po czym wynik wsadzamy z powrotem na stos. Przykładowo jeżeli na stosie mamy '5', '1' i '2' i wykonamy operacje dodawania, to dc zdejmie '2', zdejmie '1' wykona dodawanie i wsadzi wynik z powrotem na stos - teraz będzie on zawierał '5' i '3'. To jest właśnie w kilku słowach działanie odwrotnej notacji polskiej.

Wykonywanie działań w trybie odwrotnej nie jest proste do nauczenia się i przyzwyczajenia, jednak później okazuje się dużo prostsze. W odwrotnej notacji polskiej w ogóle nie ma czegoś takiego jak ustalona kolejność działań - nie staniemy przed problemem że 2+2*2 jest zależne od kolejności wykonywania. Zapis tego działania w systemie odwrotnej notacji polskiej to '2 2 * 2 +'. Zapis (2+2)*2 to '2 2 + 2 *'.

dc czyta listę instrukcji znak po znaku. Gdy trafia na cyfrę, to ją 'dokleja' do istniejącej liczby, lub jeżeli nie ma, to tworzy nową liczbę do doklejania. Jeżeli trafi na znak nie będący cyfrą, to wrzuca aktualną liczbę tworzoną na stos i wykonuje operacje na której znak trafił. To niekoniecznie musi być działanie. To może być także instrukcja obsługi stosu - np. jego wymazanie ['c'] lub zduplikowanie liczby znajdującej się na jego szczycie ['d'].

Nie będę wypisywał wszystkich instrukcji - to można sobie poczytać w man-ie. Jest ich wystarczająca ilość aby wykonać praktycznie wszystkie operacje arytmetyczne jakie może potrzebować np. programista.

Przykład użycia? Dziś nenros zapytał mnie, 'A*A=1550025, ile wynosi A?', oczywiście chodziło o pierwiastek kwadratowy. `dc -e '1550025vp` rozwiązało problem w okamgnieniu [1245]. Myślę, że dłużej włączałbym jakiś graficzny kalkulator niż zdążyłem to wszystko zrobić.

Tak więc zachęcam do dalszego zapoznania się i używania kalkulatora konsolowego.

Komentarze

seban

2006-08-05 16:37:42; odpowiedz na wpis

Czy można do tego pisać jakieś pliki wsadowe z góry zaplanmwanymi działaniami, jakieś funkcje itp?

Nivertius

2006-08-05 16:44:25; odpowiedz na #47658 seban

Możesz mu podać plik w parametrze to będzie czytał z tego pliku zamiast ze standardowego wejścia - więc teoretycznie tak.

Adi

2006-08-05 20:13:36; odpowiedz na wpis

Warto także wspomnieć o bc, który pierwotnie opierał się właśnie o dc. Jest on zdecydowanie bardziej "user-friendly" - używa naturalnej dla użytkowników notacji infiksowej (czyli "zwykłej"), składnię ma także bardziej intuicyjną - podobną do składni języka C. Nie ma za to trybu podawania instrukcji przez parametr, więc podany przykład trzeba by zrobić np. tak: `echo 'sqrt(1550025)' | bc`, albo w samym bc.

Nivertius

2006-08-05 20:37:22; odpowiedz na #47661 Adi

Naturalnej dla użytkownika - czyli takiej jak uczą w szkole ;-D

Nie zaprzeczam, że bc może być łatwieksze w użyciu dla poczatkującego. Ale brakuje mu tego 'czegoś' ;-)

Adi

2006-08-05 21:12:30; odpowiedz na #47662 Nivertius

Ciekawe, co by było gdyby uczyli w szkole odwrotnej notacji polskiej... Wymaga to innego sposobu myślenia (co jednak dla dzieci nie będzie miało raczej znaczenia). Poza tym trzeba by wyrzucić wszystkie podręczniki do matematyki, etc. ;)

Niby ta notacja likwiduje problem nawiasów, ale też trudno na pierwszy rzut oka stwierdzić których operandów dotyczy operator (w bardziej skomplikowanych wyrażeniach).

A co do bc - brakuje mu tak zwięzłego zapisu, jak ma dc? ;)

nenros

2006-08-07 15:08:10; odpowiedz na wpis

jak miło być źródłem takiej pouczajęcej notki

a tak poza tym jak zainstalowałem gentoo, to tam bc nie mam :D, jakiż ja zdolny jestem, czasami sam siebie zadziwiam

Michał Górny

2006-08-20 20:53:26; odpowiedz na wpis

Wypadałoby jeszcze wspomnieć o qalculate, podobne bardziej do bc, ale potężniejsze. Ja m.in. cenię tam wygodną obsługę jednostek.

Dodaj nowy komentarz


Menu

Klucze