Unterhaltsame mathematische Befehlszeile

  • Tutorial

Wenn Sie Linux, Free / Open BSD oder ein anderes freies Betriebssystem verwenden, besteht die Möglichkeit, dass Ihnen die Befehlszeilenschnittstelle nicht fremd ist. In diesem Fall können Sie die Befehlsshell für einfache Rechenoperationen verwenden. Dazu müssen Sie keine zusätzlichen Programme installieren, alles befindet sich bereits im Basissatz des Betriebssystems. Sie ermöglichen es Ihnen, den üblichen Taschenrechner auf dem Tisch des Buchhalters qualitativ zu ersetzen.



Bash-Integer-Rechner


Arithmetische Operationen mit Ganzzahlen in bashsehen folgendermaßen aus:


$((expression))
$(( n1+n2 ))
$(( n1/n2 ))
$(( n1*n2 ))
$(( n1-n2 ))

Zum Beispiel:


$ echo $((15+25))
$ 40

Auf der manSeitebash im Abschnitt können ARITHMETIC EVALUATIONSie sich mit der Priorität der Aktionen von Operatoren vertraut machen. Übrigens können Sie mit dem Befehl das gleiche Ergebnis erzielen expr целочисленное выражение, anstatt die Ausgabebefehle durch doppelte Klammern zu ersetzen.


$ expr 15 + 25
$ 40

bc madskills


Ganzzahlige Ausdrücke sind sicherlich gut, aber irgendwie nicht genug, selbst für einen Taschenrechner. Glücklicherweise gibt es auch ein Set im Set bc- einen C-ähnlichen interaktiven Interpreter. Wir werden keine Zeit mit Addieren und Subtrahieren verschwenden, wir werden sofort mit interessanteren Übungen fortfahren.


$ echo 7^7 |bc
823543

Dies ist bereits besser als ein Taschenrechner, da Sie mit einer Variablen eine beliebige Anzahl von Zahlen im Bruchteil erhalten können scale. Vorsicht!falschproprietäre Versionen, bcda sie nur 99 Dezimalstellen unterstützen!


$ echo 'scale=30;sqrt(2)' | bc
1.414213562373095048801688724209

2 weitere wichtige Variablen: ibaseund obasegeben die Basis für eingehende und ausgehende Nummern an.


$ echo 'ibase=16;obase=A;FF' | bc
255

Hier gibt es übrigens einen Hinterhalt. Schauen Sie sich diese beiden Beispiele an. Es scheint zu versuchen, dasselbe zu tun, aber das Ergebnis ist anders. Der springende Punkt ist der im ersten Beispiel ibase=2, aber er obase=10nimmt den Wert 2 an, da er ibaseaus der Basis bestimmt obaseund 10 gleich 2 wird. Um diesen Kreis zu durchbrechen, müssen Sie hex verwenden.


$ echo 'ibase=2;obase=10;10' | bc
10
$ echo 'ibase=2;obase=A;10' | bc
2

Wenn Sie eine Zahl auf eine Potenz erhöhen, ist es wichtig, die Klammern richtig anzuordnen, da dies assoziativ ist bcund das Ergebnis möglicherweise nicht das ist, auf das Sie sich verlassen haben.


$ echo '4^4^4' |bc
13407807929942597099574024998205846127479365820592393377723561443721\
76403007354697680187429816690342769003185818648605085375388281194656\
9946433649006084096
$ echo '(4^4)^4' |bc
4294967296

Zusätzlich zu diesen Künsten hat bces auch einen interaktiven Modus, in demquietscht und verdirbt allesgeht doch gleich, aber direkt, ohne förderband. Der Schlüssel -qist, eine obszöne Begrüßung zu unterdrücken.


$ bc -q
4^4^4
13407807929942597099574024998205846127479365820592393377723561443721\
76403007354697680187429816690342769003185818648605085375388281194656\
9946433649006084096
quit

Messung der Prozessorleistung mit bc


Vor vielen Monden boten sie auf einem populären englischsprachigen Forum , das inzwischen verstorben ist, eine genial einfache Möglichkeit, einen Prozentsatz zu erhitzen und seine Geschwindigkeit in Papageien zu berechnen.


time echo "scale=5000; 4*a(1)" | bc -l -q

Wir laden bceine Option in die Mathematikbibliothek -lund bitten Sie, die Zahl π mit einer Genauigkeit von 5000 Dezimalstellen auszugeben. Mein Berechnungsergebnis ist am Intel(R) Core(TM) i5-4300U CPU @ 1.90GHz:


real    0m24.507s
user    0m24.490s
sys     0m0.000s

Ladbare mathematische Funktionen
s (x) The sine of x, x is in radians.
c (x) The cosine of x, x is in radians.
a (x) The arctangent of x, arctangent returns radians.
l (x) The natural logarithm of x.
e (x) The exponential function of raising e to the value x.
j (n,x) The Bessel function of integer order n of x.

Bc-Skripte


Sie bckönnen bei Bedarf Funktionen definieren und Skripte ausführen. Eine Funktionsdefinition hat folgende Syntax:


define name ( parameters ) { newline
    auto_list statement_list }

Bedingte Operatoren ifund sind definiert elseund müssen nicht verwendet werden, ebenso die Header von forund while. Auf Wikipedia können Sie eine Liste der mathematischen Operatoren anzeigen und mit denen in C vergleichen. Und hier ist die Berechnung der Fibonacci-Zahlen in bc.


#!/usr/bin/bc -q
define fibo(n) {
    if (x <= 2) return n;
    a = 0;
    b = 1;
    for (i = 1; i < n; i++) {
        c = a+b; a = b; b = c;
    }
    return c;
}
fibo(1000)
quit

Da YaP bcals Desktop-Rechner jedoch nicht abgehoben hat, ist es mehr als gut.


awk: arithmometer und wahrsagerin


Ich habe es nicht oft benutzt und awkbin jedes Mal überrascht, neue Funktionen dieses Programms zu entdecken. Wenn Sie Logarithmen oder Sinuszahlen benötigen, geraten Sie nicht in Panik. Das man awkhilft Ihnen. So haben wir die Quadratwurzel bekommen.


awk 'BEGIN{print sqrt(196)}'
14

Aber wir logarithmieren bereits die Zahl π, deren 5000 Vorzeichen wir bereits berechnet haben bc.


awk 'BEGIN{print log(3.141592653589793238462643383279502884197169399375105820974944592307)}'
1.14473

Ich kündige die vollständige Liste der Funktionen an


atan2(y, x)   Return the arctangent of y/x in radians.
cos(expr)     Return the cosine of expr, which is in radians.
exp(expr)     The exponential function.
int(expr)     Truncate to integer.
log(expr)     The natural logarithm function.
rand()        Return a random number N, between 0 and 1, such that 0 ≤ N < 1.
sin(expr)     Return the sine of expr, which is in radians.
sqrt(expr)    Return the square root of expr.
srand([expr]) Use expr as the new seed for the random number generator.  If no expr is provided, use the time of day. Return the previous seed for the random number generator.

Manchmal möchten Sie Ihrem Schicksal vertrauen und alles in drei Briefen senden - awk. Tatsächlich ist dies ein Beispiel aus einem Buch von O'Reilly , das einen Münzwurf simuliert und 2 verschiedene Ereignisse erzeugttrinken oder nicht trinken mit der gleichen Wahrscheinlichkeit.


#!/bin/bash
ans=`awk -vmin=0 -vmax=1 'BEGIN{srand(); print int(min+rand()*(max-min+1))}'`
if [ $ans -eq 0 ]; then
    echo "no"
else
    echo "yes"
fi

Abschließend


In unserem Mathematik-Workshop gibt es viele verschiedene Programme. Wenn das Thema aufhört, werden wir versuchen, mit Open Source in die erste und höchste Liga der mathematischen Software aufzusteigen.


I. Ersetzen des Rechners


  1. Eingebaute Shell-Tools: arithmetische Lookups bash.
  2. Programm GNU bc.
  3. Unformat - awk.

II. Tabellen


  1. OpenOffice / LibreOffice Calc.
  2. Die KDE KSpread.
  3. Die GNOME Gnumeric.
  4. Single zum Beispiel: GNU Oleound andere.

III. Spezialisierte mathematische Programme, Schülerlevel +


  1. Das GNU Ocatve.
  2. Scilab.
  3. Maxima.
  4. R.
  5. Sage.

IV. Programmiersprachen, Mathematikbibliotheken und Umgebungen


  1. Ansi C, Bibliotheken math.h, complex.h, GSLund andere Genossen.
  2. Java Scientific Library
  3. Python, Bibliotheken SciPy, NumPy, Sympyund andere Genossen.
  4. COBOL.
  5. Fortran.
  6. Intel Math Kernel Library (Intel MKL)
  7. AMD Accelerated Parallel Processing Math (APPLM)
  8. AMD Core Math Library (ACML)

Die Liste ist natürlich nicht vollständig, daher entschuldige ich mich im Voraus, wenn ich nicht das bevorzugte mathematische Paket oder die beste Jahreszahl angegeben habe. Die letzte Gruppe ist ein wahrhaft verschüttetes Meer an vielfältiger und geeigneter Software.


Und hier ist die versprochene Verrücktheit zusammen mit der Antwort auf die Frage aus dem Bild. Quelle .


diff -u <(seq -f '%03.0f' 0 999) <((bc <<<'scale = 3009; 1 / 998001' | tr -d '\\\n'; echo) | sed s/.// | fold -3)

Jetzt auch beliebt: