面白い数学のコマンドライン

Linux、Free / Open BSD、または別の無料のOSを使用している場合は、コマンドラインインターフェイスが異質ではない可能性があります。 この場合、単純な算術演算にコマンドシェルを使用できます。 このため、追加のプログラムをインストールする必要はありません。すべてがオペレーティングシステムの基本セットに既に含まれています。 会計士のテーブルにある通常の計算機を定性的に置き換えることができます。



bash整数計算機


bash整数を使用した算術演算は次のようになります。


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

例:


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

bash man ページの [ ARITHMETIC EVALUATIONセクションで、オペレーターアクションを実行する優先順位を理解できます。 ちなみに、出力コマンドで二重角括弧で置き換える代わりに、 expr コマンドを使用してexpr を使用すると同じ結果を得ることができます。


 $ expr 15 + 25 $ 40 

bc madskills


整数式は確かに優れていますが、どういうわけか電卓にとっても十分ではありません。 幸いなことに、セットにはbcがあります。これは、Cのような対話型インタープリターです。 足し算と引き算の時間を無駄にすることはありません。すぐに、より興味深い演習に進みます。


 $ echo 7^7 |bc 823543 

これは、変数scaleを使用して小数部の任意の数の数値を取得できるため、計算機よりもすでに優れています。 気をつけて 偽物 bcプロプライエタリバージョンは、小数点以下99桁しかサポートしていないためです!


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

さらに2つの重要な変数: ibaseobaseは、着信番号と発信番号の基礎を示します。


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

ここで、ところで、待ち伏せがあります。 これらの2つの例を見てください。 同じことをしようとしているようですが、結果は異なります。 全体のポイントは、最初の例ではibase=2ですが、 obase=10はベースからibase決定し、10が2に等しくなるため obase=10 が値2を取ることです。この円を破るには、hexを使用する必要があります。


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

数値を累乗する場合、 bcは右結合であり、結果は期待したものとは異なる可能性があるため、ブラケットを正しい方法で配置することが重要です。


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

これらの芸術に加えて、 bcにはインタラクティブモードもあり、 すべてをきしむ コンベアなしですべて同じことを直接行います。 わいせつな挨拶を抑制するには、 -qスイッチが必要です。


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

BCを使用したプロセッサパフォーマンスの測定


多くの月前、 人気のある英語のフォーラムで 、今では亡くなった彼らは、パーセントを加熱し、オウムの速度を計算する見事に簡単な方法を提供しました。


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

-lオプションを使用して数学ライブラリをbcロードし、小数点以下5000桁の精度の数値πを要求します。 Intel(R) Core(TM) i5-4300U CPU @ 1.90GHz計算結果:


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

ロード可能な数学関数
 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スクリプト


bc本当に必要な場合は、関数を定義してスクリプトを実行できます。 関数定義の構文は次のとおりです。


 define name ( parameters ) { newline auto_list statement_list } 

条件文ifおよびelse定義されており、後者はfor whilewhileヘッダーと同様に使用する必要はありません。 ウィキペディアでは、数学演算子のリストを表示して、Cの演算子と比較できます 。 そして、これが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 

yap bcはうまくいきませんでしたが、デスクトップ電卓としてはそれで十分です。


awk:計と占い師


私はawk頻繁に使用したことがないので、このプログラムの新しい機能を発見するたびに驚きます。 対数または正弦を数える必要がある場合、パニックに突入しないでください。manawkが役立ちます。 これが平方根を取得する方法です。


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

しかし、すでにbcを使用して計算した5000の符号の数πを対数化します。


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

機能の全リストを発表します


 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. 

運命を信頼し、すべてを3文字で送信したい場合があります-awk。 実際、これはO'Reillyの本ので、コイントスをシミュレートし、2つの異なるイベントを生成します。 飲むか飲まない 同じ確率で。


 #!/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 

結論として


数学ワークショップにはさまざまなプログラムがありますが、トピックが成功した場合は、オープンソースを備えた数学ソフトウェアの最初で最高のリーグに移行しようとします。


I. 計算機の交換


  1. シェルシェル組み込みツール: bash算術置換。
  2. GNU bcプログラム。
  3. format- awkはありません。

II。 テーブル


  1. OpenOffice / LibreOffice Calc
  2. KDE KSpread
  3. GNOME Gnumeric
  4. シングル、たとえば: GNU Oleoなど。

III。 専門的な数学プログラム、学生レベル+


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

IV。 プログラミング言語、数学ライブラリ、および環境


  1. Ansi C 、ライブラリmath.h, complex.h, GSLおよびその他の仲間。
  2. Java Scientific Library
  3. PythonSciPy, NumPy, Sympyなど。
  4. COBOL
  5. Fortran
  6. Intel Math Kernel Library (Intel MKL)
  7. AMD Accelerated Parallel Processing Math (APPLM)
  8. AMD Core Math Library (ACML)

もちろん、リストは完全ではないため、誰かのお気に入りの数学パッケージまたはYPを指定しなかった場合は、事前に謝罪します。 最後のグループは、多様で適切なソフトウェアの真にあふれた海です。


そして、写真からの質問への回答とともに、約束されたマッドスキルがあります。 出所


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


Source: https://habr.com/ru/post/J310566/


All Articles