Jakie są różnice pomiędzy dc
i bc
kalkulatory?
Kiedy powinienem dc
i kiedy bc
?
command-line
bc
calculator
syntagma
źródło
źródło
expr
Bardzo często używam do prostych obliczeń w wierszu poleceń i skryptach.Odpowiedzi:
dc
jest bardzo archaicznym narzędziem i nieco starszym niżbc
. Cytując stronę Wikipedii :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: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ładbc
użycia:Którego użyć?
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 .: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 .: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:źródło
gen_nums
przykład strasznie skomplikowane użyciubc
. Można to uprościć:gen_nums | paste -sd+ | bc
bc
było to tylko narzędzie front-end, które kompilowałobc
notację do notacjidc
i wpuszczało ją wdc
celu uzyskania wyniku. Na FreeBSD jest jeszcze-c
flaga,bc
dzięki której można kompilować do echadc
notacji. For example
„3 * 4” | bc` jest równaecho '3 * 4' | bc -c | dc
. Zobacz linux.die.net/man/1/bc i freebsd.org/cgi/man.cgi?query=bc&sektion=1dc
używasz? W systemie Ubuntu 14.04 i OS X+
operator zawsze działa na dokładnie dwóch wartościach poza stosemdc
rejestracji:gen_nums_nonnegative | dc -e '0 0 [+?z1<m]dsmxp'
. Ten skryptdc
odczytuje i dodaje liczby jeden po drugim w pętli, a następnie drukuje wynik. Zobacz uwagę dotyczącą liczb ujemnych.bc -c
robi coś dziwnego i innego (a-c
flaga jest nieudokumentowana). Jeśli spróbuję godc
wpakować, dostaję mnóstwo błędów (a wyjście bez wpakowaniadc
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:i produkowałby sam
6
na linii. Jednakdc
trzeba powiedzieć:Można również zrobić wiele rzeczy zabawa przy użyciu
dc
np patrz moją odpowiedź tutaj do produkcjiza pomocą
dc
.źródło
dc pnedc
jest kalkulatorem, podczas gdybc
jest rzeczywistym językiem. Zobacz ich strony podręcznika.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.źródło
dc
bycie odwrotnej notacji polskiej kalkulator i od zawsze wykorzystywane HP kalkulatorów RPN I rzeczywiście wolą używaćdc
dobc
, 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ł godc
przyjaznym człowiekowi - nie dlatego, że był potężniejszy. Te dni aplikacje dzielić bibliotekami, alebc
został wezwany do języka idc
do kalkulatora bodc
zrobił matematyki ibc
mówił - do matematykidc
. Oto starszaman
strona : Opracowano język o nazwieBC
[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/11259Moim 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/
źródło