ほとんどのPOSIXシステムには、任意精度の数値処理言語であるGNUbcが付属しています。その構文はCに似ていますが、ステートメントのインタラクティブな実行と(stdin
の標準からのデータの処理もサポートします。 )。そのため、「Linuxシェルで数学を行うにはどうすればよいですか?」という質問に対する答えになることがよくあります。このスタイルの応答はオンラインで一般的です:
$ echo "1+1" | bc
2
これは完全に有効ですが、次のようなより直感的なものと比較してエレガントであると主張するユーザーはほとんどいません。
$ 1+1 #this does not work
2
インタラクティブモードは少し簡単です:
$ bc
1+1
2
quit
$
ただし、インタラクティブモードは、必要な計算を入力するだけのように、単純なものの望ましい直感的なワークフローに常に適合するとは限りません。このために、Bluebatの計算機を純粋なBashで使用することをお勧めします。
bcが実際に提供しているのは、高度な計算のための数学言語です。
mathlibを使用した高度な関数
それ自体で、bc
基本的な数学関数を提供します。インタラクティブモードでテストできます:
$ bc
3^2
9
(3^2)*(9)/3
27
--mathlib
を使用します サイン、コサイン、タンジェントなどの高度な機能を取得するオプション。インタラクティブモードでは、それらのいくつかをテストできます。これが90の正弦です:
c(90)
-.44807361612917015236
9の正弦:
s(9)
.41211848524175656975
bcで独自の関数を作成することもできます。関数定義はdefine
で始まります キーワードであり、中かっこで囲まれています。インタラクティブセッションに入力された単純な関数を次に示します。この関数は、指定された数値を返します。
$ bc
define echo(n) {
return (n);
}
同じインタラクティブセッションで、テストしてください:
echo(2)
2
echo(-2)
-2
bcのifステートメント
bc言語にはさまざまな制御ステートメントもあり、その中で最も単純なのはif/elseです。構文は一見馴染みがあるように見えるかもしれませんが、中括弧の処理方法には微妙な点があります。 else ifステートメントの句は中括弧で囲まれていますが、 then 句はそうではありませんが、両方ともセミコロンで終了します。数値の絶対値を見つける関数は次のとおりですn :
define abso(n) {
if ( n > 0 ) return (n);
{ return (-n); }
}
同じインタラクティブセッションで、テストしてください:
abso(-5)
5
abso(5)
5
インタラクティブなセッションでの作業は、迅速な計算と実験には耐えられますが、終了するとデータが失われ、間違えると編集が困難になります。幸い、bcは外部ファイルから変数と関数をロードできます。
これが2つの変数(sol
)を含むファイルです およびfoo
)およびカスタムabso
絶対値を見つける関数:
sol=299792458
foo=42
define abso(n) {
if ( n > 0 ) return (n);
{ return (-n); }
}
これをbcvars.bc
というファイルに保存します 、それをbcインタラクティブセッションにインポートできます:
$ bc bcvars.bc
foo
42
sol
299792458
abso(-23)
23
bcで数学をパワーアップ
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
bc言語は比較的単純ですが、達成しようとしていることすべての方程式を構築するのに十分な数学を知っている必要があります。 bcはデフォルトで便利な基本機能を提供し、独自の機能を作成できますが、巨人の肩の上に立つことで作業負荷を軽減できます。数学の基礎と特定のタスク(複利の計算など)の両方のために新しい関数がロードされたファイルは、GNU bcページから入手でき、bcの完全なドキュメントが入手できます。
シェルでより良い数学を行うことに興味がある場合は、bcを試してください。それはあなたを数学の天才に変えることはありませんが、それはただ一つになるのをより簡単にするかもしれません。