回答:
bc
-l
フラグで呼び出された場合、自然対数をサポートします。base-10またはbase-2のログを計算できます:
$ bc -l
...
l(100)/l(10)
2.00000000000000000000
l(256)/l(2)
8.00000000000000000007
組み込みの階乗があるとは思いませんが、それはあなた自身を書くのに十分簡単です:
$ bc
...
define fact_rec (n) {
if (n < 0) {
print "oops";
halt;
}
if (n < 2) return 1;
return n*fact_rec(n-1);
}
fact_rec(5)
120
または:
define fact_it (n) {
if (n < 0) {
print "oops";
halt;
}
res = 1;
for (; n > 1; n--) {
res *= n;
}
return res;
}
fact_it(100)
93326215443944152681699238856266700490715968264381621468592963895217\
59999322991560894146397615651828625369792082722375825118521091686400\
0000000000000000000000
POSIXに準拠するには、次のように記述する必要があります。
define f(n) {
auto s, m
if (n <= 0) {
"Invalid input: "
n
return(-1)
}
s = scale
scale = 0
m = n / 1
scale = s
if (n != m) {
"Invalid input: "
n
return(-1)
}
if (n < 2) return(1)
return(n * f(n - 1))
}
つまり、単一文字の関数名、no print
、no halt
、で必要な括弧return(x)
。入力の検証が必要ない場合(正の整数の場合)、それは次のとおりです。
define f(n) {
if (n < 2) return(1)
return(n * f(n - 1))
}
0!=1
と同様1!=1
です。少なくとも、それはウィキペディアが言うことです。
Orpieがあります電卓とコマンドラインオタクのための電卓です。これは、最新のHP RPN計算機をエミュレートします。これはもちろん、唯一の真の計算方法です。
あなたが電卓異端者であり、TIやカシオなどで育った場合、オンラインで多くの RPN チュートリアルを使用して再教育を開始できます。OrpieマニュアルRPNの考え方を理解すれば、は最終的にはでしょう。
5を計算するには!Orpieで、記述したとおりに入力し5 !ます。あなたは押すことができEnter、プッシュにそれらの間5
て最初にスタックする、それは必須ではありません。
ログ10(5)を計算するには、と入力し5 Enter ' l o Enterます。5
この場合、次のキーストロークは演算子ではないため、最初にスタックにプッシュする必要があります。その一重引用符はコマンド短縮モードに入ります。これによりlog10
、入力を開始できます。これは、最初の2文字だけで一意に識別できます。(l
単独で、ln
代わりに自然対数関数を取得します。)
他のRPN計算機と同様に、Orpieを少し練習すれば、本当に速くなります。
OrpieはUbuntuリポジトリにあります。FreeBSDは、Portsに含まれていmath/orpie
ます。OS Xでは、Homebrewを使用してインストールできます。サードパーティのパッケージが他のOSで利用できる場合があります。OCamlで書かれているため、ソースからのビルドは少し面倒かもしれません。OCaml開発環境がインストールされていない可能性があります。ただし、1つのセットアップを取得するのはそれほど難しくありません。
常にGNU Octaveがありますはコマンドライン電卓のemacsです(電卓に完全な開発環境とプログラミング言語を組み込みたい場合や、数千のオプションのアドオンが必要な場合)
または、統計がもっと重要な場合はR。
私はほとんどの場合bc -l
、標準の数学ライブラリをロードするために使用しています...にbc
エイリアスを作成しましたbc -l
。階乗関数の定義については、Matの回答をbc
参照してください。ただし、マニュアルページでは次のように定義されています。
define f (x) {
if (x <= 1) return (1);
return (f(x-1) * x);
}
== 1ではなく<= 1をチェックすると、たまたま負の数(エラー)またはゼロ(有効)を入力した場合に無限ループが防止されます。
私のお気に入りは、軽量でシンプルW-Calc
です。
http://w-calc.sourceforge.net
マニュアルを調べたり、一般的な機能を手動で再作成したりする必要はありません。bc
コマンドはほとんどの場合期待どおりのものなので、必要なものを入力するだけで機能します。あなたの質問に従ってテスト-実際にlog()
&n!
期待どおりに動作します。
(確かに私はOrpieのことを聞いたことがない-非常によく、より良いオプションかもしれません。)