bc 不支持对数和阶乘计算?

dai*_*isy 19 calculator

是否有任何其他的命令行计算器支持logn!计算?至少bc不能那样做,它告诉我解析错误

最好我可以使用脚本,例如 echo '5!' | program

Mat*_*Mat 22

bc如果使用-l标志调用,则支持自然对数。您可以使用它计算 base-10 或 base-2 日志:

$ bc -l
...
l(100)/l(10)
2.00000000000000000000

l(256)/l(2)
8.00000000000000000007
Run Code Online (Sandbox Code Playgroud)

我不认为有一个内置的阶乘,但这很容易让你自己写:

$ 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
Run Code Online (Sandbox Code Playgroud)

或者:

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
Run Code Online (Sandbox Code Playgroud)

要符合 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))
}
Run Code Online (Sandbox Code Playgroud)

即:单字符函数名,no print,no halt, 中需要括号return(x)。如果你不需要输入验证(这里是正整数),它只是:

define f(n) {
  if (n < 2) return(1)
  return(n * f(n - 1))
}
Run Code Online (Sandbox Code Playgroud)


War*_*ung 5

Orpie是计算器和命令行极客联合体的计算器它模拟了经典的 HP RPN 计算器,这当然是唯一真正的计算方法。我们都知道

如果您是一个计算器异端,是在 TI、Casios 等环境下长大的,那么网上有很多 RPN 教程,您可以通过这些教程开始您的再教育。一旦您掌握了 RPN 的思维方式, Orpie 手册最终会对您有所帮助。

计算 5! 在 Orpie 中,只需按您的书写方式键入:5 !。您可以Enter在它们之间按一下以5先压入堆栈,但这不是必需的。

要计算 log 10 (5),请输入5 Enter ' l o Enter。在这种情况下,您必须5先将 推入堆栈,因为下一个击键不是运算符。该单引号字符进入命令缩写模式,您可以开始键入log10,您可以仅使用前两个字符来唯一标识它。(相反l,单独获得自然对数函数ln。)

与任何 RPN 计算器一样,通过一些练习,您可以非常快地使用 Orpie。

Orpie 位于 Ubuntu 库存存储库中。FreeBSD 将其包含在 Ports 中,作为math/orpie. 在 macOS 上,您可以通过Homebrew安装它。第三方软件包可能适用于其他操作系统。从源代码构建可能有点麻烦,因为它是用OCaml编写的,而且您可能没有安装 OCaml 开发环境。不过,设置一套并不是特别困难。