Answers:
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))
}
也就是说:中的单字符函数名称,不print
,不halt
,带括号return(x)
。如果您不需要输入验证(此处为正整数),则只需:
define f(n) {
if (n < 2) return(1)
return(n * f(n - 1))
}
0!=1
,就像1!=1
。至少,这就是维基百科所说的。
Orpie是在为计算器和命令行爱好者计算器。它模仿了现代的HP RPN计算器,这当然是唯一真正的计算方法。
如果您是在TI,Casios等平台上成长的异端计算器,那么可以在线找到许多 RPN 教程,以开始进行重新教育。一旦您掌握了RPN的思考方式,Orpie手册最终将对您有所帮助。
计算5!在Orpie,只需键入它,你会写:5 !。您可以Enter在它们之间按以先推入5
堆栈,但这不是必需的。
要计算日志10(5),请键入5 Enter ' l o Enter。5
在这种情况下,您确实必须先将压入堆栈,因为下一次击键不是操作员。该单引号字符将进入命令缩写模式,该模式使您可以开始键入log10
,仅前两个字符就可以唯一标识。(l
单独获得自然日志功能ln
。)
正如任何RPN计算器,你可以得到真正的快与Orpie,有一些练习。
Orpie有现货Ubuntu仓库。FreeBSD将它包含在Ports中math/orpie
。在OS X上,可以通过Homebrew安装它。第三方软件包可能适用于其他操作系统。从源代码进行构建可能会比较麻烦,因为它是用OCaml编写的,并且您可能没有安装OCaml开发环境。不过,设置不是特别困难。
我最喜欢的是轻便,简单W-Calc
。
http://w-calc.sourceforge.net
您无需像手动操作那样查看手册或手动重新创建通用功能bc
-这些命令几乎完全符合您的期望,因此只需键入所需内容即可使用。的确-测试按你的问题log()
和n!
达到预期效果。
(诚然,我还没有听说过Orpie-很好,也许是一个更好的选择。)