Calculator

bc 不支持對數和階乘計算?

  • September 23, 2021

有沒有其他支持計算的命令行log計算器n!?至少bc不能這樣做,它產生了一個解析錯誤。

最好能在腳本中使用它,例如echo '5!' | program.

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

引用自:https://unix.stackexchange.com/questions/44226