Zum Inhalt springen

„Bc (Unix)“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
[ungesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Keine Bearbeitungszusammenfassung
 
den Programmnamen ''bc'' kursiv statt in code-Tags
 
(92 dazwischenliegende Versionen von 60 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{SEITENTITEL:bc (Unix)}}
Dieser Rechner ist kein gewöhnlicher, wie man ihn aus Windows kennt. Es ist ein wissenschaftlicher, welcher es ermöglicht, ein programm zu schreiben, welches es ermöglicht komplexe aufgaben zu berechnen.
'''bc''' (kurz für ''basic calculator'') ist eine numerische [[Programmiersprache]], die an die [[Syntax]] von [[C (Programmiersprache)|C]] angelehnt ist, sowie ein durch den [[Portable Operating System Interface|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 [[Gleitkommazahl]]en (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 Laboratories|Bell Labs]] entwickelt.


== Arbeitsweise ==
Aufrufbar mit BC im Terminal unter Mac - OSX, Linux und Unix.
Der Interpreter folgt, vom POSIX-Standard so festgelegt,<ref name="posixbc">{{Internetquelle |url=http://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html |titel=bc-Spezifikation des POSIX-Standards |sprache=en |abruf=2019-04-25}}</ref> den üblichen Anforderungen an ''Utilities'', den sogenannten ''Utility Syntax Guidelines''.<ref name="posixutil">{{Internetquelle |url=http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html#tag_12_02 |titel=Utility Syntax Guidelines |sprache=en |abruf=2019-04-25}}</ref> Als Eingabe werden entweder (Text-)Dateien oder Input auf <code><stdin></code> erwartet. Ziel der Ausgabe ist in jedem Fall <code><stdout></code>, Fehlermeldungen gehen nach <code><stderr></code>.


''bc'' verwendet keine eventuell verfügbaren Gleitkommaeinheiten eines Rechners, sondern arbeitet intern nur mit [[Integer (Datentyp)|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.
==Beispiel==


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.
Dises Beispiel definiert eine Prozedur, welche rekursiv die Fakultät einer in x gegebenen Zahl ermittelt.


Die von POSIX standardisierte ''bc''-Sprache ist in ihrer Struktur an C angelehnt und in demselben Dokument ebenfalls (in Form einer [[LL(k)-Grammatik|LL1-Grammatik]]) festgelegt (unter ''Extended Description'').<ref name="posixbc" /> Von Haus aus enthält ''bc'' nur einige Grundfunktionen wie etwa die [[Exponentialfunktion]], die [[Trigonometrische Funktion|trigonometrischen Funktionen]] und den [[Logarithmus#Natürlicher Logarithmus|natürlichen Logarithmus]]. Es können jedoch weitere Funktionen selbst definiert werden.
define fact (x) {
if(x < 1) return 1
return (x*fact(x-1))
}


== Varianten ==
Ausgabe des ergebnisses von '''''100!''''' durch eingabe von :
=== GNU bc ===
[[GNU-Projekt|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 (Unix)|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 [[Bedingte Anweisung und Verzweigung|if-Anweisung]] und anderes.
fact(100)

== 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 [[Rekursion|nonrekursiv]] die [[Fakultät (Mathematik)|Fakultät]] errechnet. Danach wird diese Funktion aufgerufen um <code>10!</code> auszugeben. Das Beispiel ist der [[Manpage|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 ==
* {{man||bc|posix|arbitrary-precision arithmetic language}}
* {{man|1|bc|bsd|arbitrary-precision arithmetic language and calculator}}
* [http://www.gnu.org/software/bc/bc.html GNU bc] Beschreibung (englisch)
* [http://directory.fsf.org/gnu/bc.html Free Software Directory], Übersicht der Free Software Foundation zu bc (englisch)
* [http://sciencesoft.at/index.jsp?link=bc GNU bc] zum Ausprobieren
* {{Heise online |ID=6481093 |Titel="He who touched it last, owned it": Zum Tode der Unix-Pionierin Lorinda Cherry |Autor=Detlef Borchers |Datum=2022-02-17 |Abruf=2022-02-17 |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 ==
<references />

[[Kategorie:Freie Mathematik-Software]]
[[Kategorie:Skriptsprache]]
[[Kategorie:Unix-Software]]
[[Kategorie:Unix-Betriebssystemkomponente]]

Aktuelle Version vom 23. März 2022, 15:10 Uhr

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.

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.

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.

Die folgenden Beispiele sind mit einem POSIX-bc unter AIX (Version 7.1.5, TL 1) erzeugt. Ausgaben sind im Folgenden fett gesetzt:

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

[Bearbeiten | Quelltext bearbeiten]

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

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. a b bc-Spezifikation des POSIX-Standards. Abgerufen am 25. April 2019 (englisch).
  2. Utility Syntax Guidelines. Abgerufen am 25. April 2019 (englisch).