BCはログと継承の計算をサポートしていませんか?

BCはログと継承の計算をサポートしていませんか?

log計算をサポートする他のコマンドライン電卓はありますかn!?少なくともbcそのようには機能しないため、解析エラーが発生します。

好ましくは、スクリプトで使用できますecho '5!' | program

答え1

bcフラグを使用して呼び出すと、自然ログがサポートされます-l。これを使用して、基底が10のログまたは基底が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))
}

答え2

オフィはいこれ電卓とコマンドラインオタクが統合された電卓のコレクション。これは、唯一の実際の計算方法である既存のHP RPN電卓をエミュレートします。知られている

あなたが電卓の異端者であり、子供の頃からTI、カシオスのような製品を使用してきた場合たくさん RPN 地図時間オンラインでさらにトレーニングを始めることができます。オフィスマニュアルRPNの考え方を学ぶと、結局役に立ちます。

5を計算してください! Orpieでは、次のように入力します5 !Enterその間を押して最初にスタックにプッシュできますが、5必須ではありません。

ログ10(5)を計算するには、を入力します5 Enter ' l o Enter。この場合、5次のキーストロークは演算子ではないため、まずスタックにプッシュする必要があります。この一重引用符文字はコマンドの略語モードに入り、入力を開始できます。log10ここでは、最初の2文字のみを使用して一意に識別できます。 (代わりにl自然ログ関数のみを求めるだけですln。)

他のRPN電卓と同様に、次のような結果が得られます。本物Orpieとの速い練習セッションと少し練習。

OrpieはUbuntuストックストアにあります。 FreeBSDのポートにmath/orpie自分で作った。他のオペレーティングシステムでは、サードパーティのソフトウェアパッケージを使用できます。ソースからビルドするのは少し面倒です。オカミール、OCaml開発環境がインストールされていない可能性があります。しかし、セットを構成することは特に難しくありません。

答え3

常にGNUがありますオクターブ、コマンドライン計算機用のemacs(計算機に組み込まれた完全な開発環境とプログラミング言語と何千ものオプションの追加機能が必要な場合)

または統計を好むなら。

bc -l私は主に標準の数学ライブラリをロードするために使用します...継承関数の定義については、Matの答えを参照してください...bcマニュアルページでは、次のように定義します。bc -lbc

define f (x) {
  if (x <= 1) return (1);
  return (f(x-1) * x);
}

== 1の代わりに<= 1を選択すると、負の数(エラーでなければならない)または0(有効)を入力しても無限ループを防ぐことができます。

答え4

完全に過剰ですが、プログラミング言語ソルバーは最終的にコマンドライン電卓です。

$ echo 5 | python -c 'import sys; import math; print math.factorial(int(sys.stdin.readline()));'
120

関連情報