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))
}

おすすめ記事