Antworten:
dc
ist ein sehr archaisches Werkzeug und etwas älter als bc
. So zitieren Sie die Wikipedia-Seite :
Es ist eines der ältesten Unix-Dienstprogramme vor der Erfindung der Programmiersprache C; Wie andere Dienstprogramme dieses Jahrgangs verfügt es über eine Reihe leistungsstarker Funktionen, jedoch über eine äußerst knappe Syntax.
Die Syntax ist eine umgekehrte polnische Notation, was im Grunde bedeutet, dass die Argumente (dh Zahlen) zuerst vom Operator gefolgt werden. Ein grundlegendes Beispiel für die dc
Verwendung ist:
echo '3 4 * p' | dc
Wo p
ist das erforderlich, um das Ergebnis der Berechnung zu drucken. bc
Auf der anderen Seite wird die vertraute Infix-Notation verwendet und ist daher intuitiver zu bedienen. Hier ist ein bc
Anwendungsbeispiel:
echo '3 * 4' | bc
bc
ist von POSIX standardisiert und wahrscheinlich auch portabler (zumindest auf modernen Systemen). Wenn Sie manuelle Taschenrechnerarbeiten ausführen, ist dies definitiv die Wahl (es sei denn, Sie sind ein Masochist). dc
kann immer noch verwendet werden, hier ist ein Fall, in dem die umgekehrte polnische Notation nützlich ist. Stellen Sie sich vor, Sie haben ein Programm, das einen Zahlenstrom ausgibt, den Sie summieren möchten, z.
23
7
90
74
29
Dies zu tun dc
ist sehr einfach (zumindest bei modernen Implementierungen, bei denen jeder Operator mehr als zwei Zahlen annehmen kann), da Sie nur ein +p
an den Stream anhängen müssen , z.
{ gen_nums; echo +p } | dc
Dies bc
ist jedoch komplexer, da wir nicht nur +
zwischen die einzelnen Zahlen ein Trennzeichen setzen und sicherstellen müssen, dass sich alle in derselben Zeile befinden, sondern auch sicherstellen müssen, dass am Ende eine neue Zeile steht:
{ gen_nums | sed '$ !s/$/+/' | tr -d '\n'; echo; } | bc
gen_nums
Beispiel mit schrecklich komplex gedreht bc
. Es könnte vereinfacht werden:gen_nums | paste -sd+ | bc
bc
war es nur ein Front-End-Tool, das die bc
Notation in die Notation von kompilierte dc
und in diese umwandelte, dc
um das Ergebnis zu erhalten. Unter FreeBSD gibt es noch das -c
Flag, bc
mit dem Sie noch das dc
Notationsecho . For example
'3 * 4' | übersetzen können bc` ist unglaublich ähnlich zu echo '3 * 4' | bc -c | dc
. Siehe linux.die.net/man/1/bc und freebsd.org/cgi/man.cgi?query=bc&sektion=1
dc
du? Unter Ubuntu 14.04 und OS X bearbeitet der +
Bediener immer genau zwei Werte vom Stapel
bc -c
macht man etwas komisches und anderes (und die -c
Flagge ist undokumentiert). Wenn ich versuche, es weiterzuleiten dc
, erhalte ich eine Reihe von Fehlern (und die Ausgabe ohne Weiterleitung dc
ist sehr kryptisch @iK3:K4:*W@r\n@i
).
Ein grundlegender Unterschied zwischen den beiden ist, dass dc
die umgekehrte polnische Notation verwendet wird . Es werden explizite Befehle benötigt, um eine Ausgabe zu erzeugen.
Sie können zwei Ganzzahlen hinzufügen, bc
indem Sie sagen:
bc <<< "2+4"
und es würde 6
auf einer Linie von selbst produzieren. In dc
würden Sie jedoch sagen müssen:
dc <<< "2 4 +p"
Sie können auch viel Spaß damit machen dc
, z. B. finden Sie in meiner Antwort hier Informationen zum Produzieren
Hello World!
mit dc
.
dc <<< "8 9 * P101P108P108P111P4 8 * P81 6 + P111P114P108P100P33P"
dc
ist ein Taschenrechner, während bc
eine tatsächliche Sprache ist. Siehe ihre Manpages.
bcdc ist ein umgekehrter Tischrechner, der unbegrenzte arithmetische Präzision unterstützt. Außerdem können Sie Makros definieren und aufrufen. Normalerweise liest DC von der Standardeingabe; Wenn Befehlsargumente angegeben werden, handelt es sich um Dateinamen, und dc liest und führt den Inhalt der Dateien aus, bevor von der Standardeingabe gelesen wird. Alle normalen Ausgaben erfolgen auf Standardausgabe. Alle Fehlerausgaben beziehen sich auf Standardfehler.
bc ist eine Sprache, die willkürlich genaue Zahlen mit interaktiver Ausführung von Anweisungen unterstützt. Die Syntax weist einige Ähnlichkeiten mit der Programmiersprache C auf. Eine Standard-Mathematikbibliothek ist über die Befehlszeile verfügbar. Auf Wunsch wird die Mathematikbibliothek definiert, bevor Dateien verarbeitet werden. bc beginnt mit der Verarbeitung von Code aus allen in der Befehlszeile aufgeführten Dateien in der angegebenen Reihenfolge. Nachdem alle Dateien verarbeitet wurden, liest bc von der Standardeingabe. Der gesamte Code wird beim Lesen ausgeführt. (Wenn eine Datei einen Befehl zum Anhalten des Prozessors enthält, liest bc niemals von der Standardeingabe.)
Es kommt wirklich darauf an, was Sie letztendlich mathematisch machen wollen. Einige Operationen sind mit nicht möglich dc
. Ich habe beide im Laufe der Jahre zusätzlich zu mehreren anderen Befehlszeilen-Rechner-Tools verwendet. Weitere Beispiele finden Sie unter " Solver für Befehlszeilenausdrücke? ".
dc
ich ein Umkehrpolitur-Notationsrechner bin und ich immer HP Umkehrpolitur-Notationsrechner verwendet habe, bevorzuge ich die Verwendung von dc
, bc
aber ich würde sagen, dass beide immer noch verwendet werden, wenn Sie eine komplexe mathematische Berechnung durchführen müssen. Ich verwende sie oft, um Zahlen s / w Basis 10 in Basis 16 und Basis 2 umzuwandeln. Aber ich habe sie auch verwendet, um Spalten in Tabellendaten aus einem AWK-Skript heraus zu zählen.
bc
war eine Sprache in dem Sinne, dass sie dc
menschenfreundlich machte - nicht, dass sie mächtiger war. In diesen Tagen die Apps teilen libs, aber bc
wurde eine gerufene Sprache und dc
einen Rechner , weil dc
Mathe tat und bc
sprach Mathematik - zu dc
. Hier ist eine ältere man
Seite : Es wurde eine Sprache namens BC
[1] entwickelt, die Programme akzeptiert, die in höheren Sprachen geschrieben sind, und die von DC interpretierte Ausgabe kompiliert. Einige der nachfolgend beschriebenen Befehle wurden für die Compiler-Oberfläche entwickelt und sind für einen menschlichen Benutzer nicht einfach zu manipulieren.
dc
ist auch eine Sprache. zB codegolf.stackexchange.com/a/47921/11259
Meiner bescheidenen Meinung nach und in so wenigen Worten wie möglich unterscheidet sich GNU dc in drei Punkten von GNU bc:
1) Wenn die Mathematikbibliothek von bc kein Interesse hat, so viele Tastenanschläge wie möglich zu speichern (in Jan Łukasiewiczs Worten: eine Notation ohne Klammern), wenn elementare Arithmetik ausgeführt wird, um sich mehr auf das Wesentliche zu konzentrieren und Ablenkungen zu vermeiden.
2) In der Befehlszeile von Microsoft Windows 7 verbraucht GNU dc weniger Speicher (~ 320K) als GNU bc (~ 360K).
3) In GNU dc gibt es eine weitaus genauere Steuerung als in GNU bc, zum Beispiel fehlen Stapel- und Registerbefehle in GNU bc.
Version 1.07.1 win32 für beide ist unter https://embedeo.org/ws/command_line/bc_dc_calculator_windows/ verfügbar.
expr
sehr oft für einfache Berechnungen in der Kommandozeile und in Skripten.