bc (Unix)
bc (kurz für basic calculator) ist eine numerische Programmiersprache, die an die Syntax von C angelehnt ist, sowie ein durch den POSIX-Standard genormter Interpreter, der diese Programmiersprache implementiert und dessen Vorhandensein in dem standardkonformen Betriebssystemen vorgeschrieben ist. Das herausstellende Merkmal von bc ist die Fähigkeit, mit Gleitkommazahlen (fast) beliebig großer Genauigkeit zu rechnen; die Grenze liegt je nach Version bei mindestens mehreren tausend Stellen, meist aber bei mehreren Millionen bis Milliarden. Die ersten Versionen wurden von Lorinda Cherry bei den Bell Labs entwickelt.
Arbeitsweise
Der Interpreter folgt, vom POSIX-Standard so festgelegt,[1] den üblichen Anforderungen an Utilities, den sogenannten Utility Syntax Guidelines.[2] Als Eingabe werden entweder (Text-)Dateien oder Input auf <stdin>
erwartet. Ziel der Ausgabe ist in jedem Fall <stdout>
, Fehlermeldungen gehen nach <stderr>
.
bc verwendet keine eventuell verfügbaren Gleitkommaeinheiten eines Rechners, sondern arbeitet intern nur mit Integers; die Gleitkommafähigkeit wird per Software hergestellt. Nur so kann die Sprache diese hohen und von verfügbarer Hardware unabhängigen Genauigkeiten erreichen. Allerdings ist bc damit auch prinzipbedingt wesentlich langsamer als Software, die diese Einrichtungen benutzt.
Nicht nur die zu erzielende Rechengenauigkeit kann festgelegt werden, bc ist in der Lage, mit beliebigen (Zahlen-)Basen zu arbeiten und diese ineinander umzurechnen. Bis zur Basis 16 wird die übliche Schreibweise verwendet und Ziffern jenseits der 9 durch die Buchstaben A bis F dargestellt. Die Ziffern in Basen größer 16 werden hingegen als aus mehreren (dezimalen) Einzelziffern bestehende Zahlen dargestellt, die durch ein Trennzeichen (meist ein Blank) getrennt sind. Dabei werden für die Basen 17-100 zweistellige, für die Basen 101-1000 dreistellige Dezimalzahlen und so fort verwendet. Siehe auch die Anwendungsbeispiele weiter unten.
Die von POSIX standardisierte bc-Sprache ist in ihrer Struktur an C angelehnt und in demselben Dokument ebenfalls (in Form einer LL1-Grammatik) festgelegt (unter Extended Description).[1] Von Haus aus enthält bc nur einige Grundfunktionen wie etwa die Exponentialfunktion, die trigonometrischen Funktionen und den natürlichen Logarithmus. Es können jedoch weitere Funktionen selbst definiert werden.
Varianten
GNU bc
GNU-bc ist ein Nachbau von POSIX-bc, weist allerdings gegenüber dem Standard zahlreiche Änderungen auf. Es ist, anders als manche sonstigen Varianten, von Grund auf in C geschrieben und baut nicht auf dc auf. Die GNU-Variante erweitert die POSIX-Variante um zusätzliche Funktionen.
Zu den Unterschieden zählen erweiterte Möglichkeiten zur Benennung von Variablen, Arrays und Funktionen, eine erweiterte if-Anweisung und anderes.
Beispiele
Die folgenden Beispiele sind mit einem POSIX-bc unter AIX (Version 7.1.5, TL 1) erzeugt. Ausgaben sind im Folgenden fett gesetzt:
Berechnungen
Dieses Beispiel zeigt, wie erst eine Funktion definiert wird, die nonrekursiv die Fakultät errechnet. Danach wird diese Funktion aufgerufen um 10!
auszugeben. Das Beispiel ist der man page für bc unter AIX entnommen.
user@system $ bc define f(n) { auto i, r; r = 1; for (i=2; i<=n; i++) r *= i; return (r); } f(10) 3628800
Wechsel und Umrechnung verschiedener Basen
bc unterscheidet zwischen der Basis für die Eingabe (ibase) und die Ausgabe (obase). Etwa lautet die Darstellung der Zahl 1024 (dezimal) zu den Basen 25 und 125:
user@system $ bc obase=25 1024 01 15 24 obase=125 1024 008 024
Weblinks
bc
: arbitrary-precision arithmetic language – Open Group Base Specificationbc(1)
: arbitrary-precision arithmetic language and calculator – OpenBSD General Commands Manual- GNU bc Beschreibung (englisch)
- Free Software Directory, Übersicht der Free Software Foundation zu bc (englisch)
- GNU bc zum Ausprobieren
- Detlef Borchers: "He who touched it last, owned it": Zum Tode der Unix-Pionierin Lorinda Cherry. In: Heise online. 17. Februar 2022. Abgerufen am 17. Februar 2022.; Zitat: „Lorinda Cherry war bereits in der ersten Unix-Version vom November 1971 mit dem Programm dc (Desk Calculator) vertreten. Damit begann ihre rege Tätigkeit.“.
Einzelnachweise
- ↑ a b bc-Spezifikation des POSIX-Standards. Abgerufen am 25. April 2019 (englisch).
- ↑ Utility Syntax Guidelines. Abgerufen am 25. April 2019 (englisch).