Odpowiedzi:
dc
jest bardzo archaicznym narzędziem i nieco starszym niż bc
. Cytując stronę Wikipedii :
Jest to jedno z najstarszych narzędzi uniksowych, nawet przed wynalezieniem języka programowania C; podobnie jak inne narzędzia tego rocznika, ma potężny zestaw funkcji, ale niezwykle zwięzłą składnię.
Składnia jest odwrotną notacją polską, co w zasadzie oznacza, że argumenty (tj. Liczby) są poprzedzane przez operatora. Podstawowym przykładem dc
użycia jest:
echo '3 4 * p' | dc
Gdzie p
wymagane jest wydrukowanie wyniku obliczeń. bc
z drugiej strony używa bardziej znanej notacji infiksowej i dlatego jest bardziej intuicyjny w użyciu. Oto przykład bc
użycia:
echo '3 * 4' | bc
bc
jest standaryzowany przez POSIX i prawdopodobnie jest bardziej przenośny z tych dwóch (przynajmniej w nowoczesnych systemach). Jeśli wykonujesz ręczną pracę kalkulatora, jest to zdecydowanie wybór (chyba że jesteś masochistą). dc
wciąż może mieć swoje zastosowania, oto przypadek, w którym przydaje się odwrotna notacja polskiego. Wyobraź sobie, że masz program, który generuje strumień liczb, które chcesz zsumować, np .:
23
7
90
74
29
dc
Wykonanie tego jest bardzo proste (przynajmniej z nowoczesnymi implementacjami, w których każdy operator może pobrać więcej niż dwie liczby), ponieważ wystarczy dodać tylko +p
do strumienia, np .:
{ gen_nums; echo +p } | dc
Ale z bc
tym jest bardziej skomplikowane, ponieważ musimy nie tylko umieścić +
między każdą liczbą i upewnić się, że wszystko jest w tej samej linii, ale także upewnić się, że na końcu jest nowa linia:
{ gen_nums | sed '$ !s/$/+/' | tr -d '\n'; echo; } | bc
gen_nums
przykład strasznie skomplikowane użyciu bc
. Można to uprościć:gen_nums | paste -sd+ | bc
bc
było to tylko narzędzie front-end, które kompilowało bc
notację do notacji dc
i wpuszczało ją w dc
celu uzyskania wyniku. Na FreeBSD jest jeszcze -c
flaga, bc
dzięki której można kompilować do echa dc
notacji . For example
„3 * 4” | bc` jest równa echo '3 * 4' | bc -c | dc
. Zobacz linux.die.net/man/1/bc i freebsd.org/cgi/man.cgi?query=bc&sektion=1
dc
używasz? W systemie Ubuntu 14.04 i OS X +
operator zawsze działa na dokładnie dwóch wartościach poza stosem
bc -c
robi coś dziwnego i innego (a -c
flaga jest nieudokumentowana). Jeśli spróbuję go dc
wpakować, dostaję mnóstwo błędów (a wyjście bez wpakowania dc
jest bardzo tajemnicze @iK3:K4:*W@r\n@i
).
Podstawowa różnica między nimi polega na tym, że dc
używa odwrotnej notacji polskiej . Wymaga wyraźnych poleceń nawet w celu uzyskania wyniku.
Możesz dodać dwie liczby całkowite bc
, mówiąc:
bc <<< "2+4"
i produkowałby sam 6
na linii. Jednak dc
trzeba powiedzieć:
dc <<< "2 4 +p"
Można również zrobić wiele rzeczy zabawa przy użyciu dc
np patrz moją odpowiedź tutaj do produkcji
Hello World!
za pomocą dc
.
dc <<< "8 9 * P101P108P108P111P4 8 * P81 6 + P111P114P108P100P33P”
dc
jest kalkulatorem, podczas gdy bc
jest rzeczywistym językiem. Zobacz ich strony podręcznika.
pnedc to odwrócony polski kalkulator biurkowy, który obsługuje arytmetykę o nieograniczonej precyzji. Pozwala także definiować i wywoływać makra. Normalnie DC odczytuje ze standardowego wejścia; jeśli podano mu argumenty polecenia, są to nazwy plików, a dc czyta i wykonuje zawartość plików przed odczytem ze standardowego wejścia. Wszystkie normalne dane wyjściowe są zgodne ze standardowymi danymi wyjściowymi; wszystkie dane wyjściowe błędu są zgodne z błędem standardowym.
bc jest językiem obsługującym dowolne precyzyjne liczby z interaktywnym wykonywaniem instrukcji. Istnieją pewne podobieństwa w składni języka programowania C. Standardowa biblioteka matematyczna jest dostępna w opcji wiersza poleceń. Na żądanie biblioteka matematyczna jest definiowana przed przetwarzaniem jakichkolwiek plików. bc zaczyna się od przetworzenia kodu ze wszystkich plików wymienionych w wierszu poleceń w podanej kolejności. Po przetworzeniu wszystkich plików, bc odczytuje ze standardowego wejścia. Cały kod jest wykonywany podczas odczytu. (Jeśli plik zawiera polecenie zatrzymania procesora, bc nigdy nie będzie czytać ze standardowego wejścia.)
To naprawdę zależy od tego, co ostatecznie chcesz zrobić matematycznie. Niektóre operacje nie są możliwe przy użyciu dc
. Przez lata korzystałem z obu tych narzędzi oprócz kilku innych narzędzi kalkulatora wiersza poleceń. Zobacz „ solver wyrażenia wiersza poleceń? ”, Aby uzyskać dodatkowe przykłady.
dc
bycie odwrotnej notacji polskiej kalkulator i od zawsze wykorzystywane HP kalkulatorów RPN I rzeczywiście wolą używać dc
do bc
, ale chciałbym powiedzieć, że oboje nadal używany w każdej chwili trzeba wykonywać złożone obliczenia matematyczne. Często używam ich do konwertowania liczb b / w base 10 na base 16 i base 2. Ale użyłem ich do zsumowania kolumn w danych tabelarycznych również ze skryptu AWK.
bc
był językiem w tym sensie, że uczynił go dc
przyjaznym człowiekowi - nie dlatego, że był potężniejszy. Te dni aplikacje dzielić bibliotekami, ale bc
został wezwany do języka i dc
do kalkulatora bo dc
zrobił matematyki i bc
mówił - do matematyki dc
. Oto starsza man
strona : Opracowano język o nazwie BC
[1], który akceptuje programy napisane w językach wyższego poziomu i kompiluje dane wyjściowe interpretowane przez DC. Niektóre z opisanych poniżej poleceń zostały zaprojektowane dla interfejsu kompilatora i nie są łatwe w obsłudze dla użytkownika.
dc
to także język. np. codegolf.stackexchange.com/a/47921/11259
Moim skromnym zdaniem i w jak najmniejszej liczbie słów, GNU dc różni się od GNU bc na 3 sposoby:
1) Jeśli biblioteka matematyczna bc nie ma znaczenia, aby zaoszczędzić jak najwięcej naciśnięć klawiszy (słowami Jana Łukasiewicza: notacja bez nawiasów) podczas wykonywania elementarnej arytmetyki, aby bardziej skoncentrować się na istotnych kwestiach i uniknąć rozpraszania uwagi.
2) W wierszu poleceń systemu Microsoft Windows 7 GNU dc zużywa mniej pamięci (~ 320 KB) niż GNU bc (~ 360 KB).
3) Wiele szczegółowych kontroli w GNU dc niż w GNU bc, na przykład polecenia GNU bc są niedostępne.
Wersja 1.07.1 win32 dla obu jest na https://embedeo.org/ws/command_line/bc_dc_calculator_windows/
expr
Bardzo często używam do prostych obliczeń w wierszu poleceń i skryptach.