by Guido Socher (homepage)
关于作者:
我的第一个 RPN 计算器是 HP15c,第一眼看上去,它就十分可爱。
目录:
|
Linux 下的 RPN 计算器
摘要:
RPN 代表逆波兰式(Reverse Polish Notation)。逆波兰式最早于1920年由 Jan Lukasiewicz 发明,作为一种无需括号的数学表达式。首先需要用一点时间来学习一下 RPN,但之后你很快就会发现这是一种比通常的代数式更优越的表达方式。
_________________ _________________ _________________
|
简介
RPN 便携计算器因为 HP 计算器而变得热门起来。早在 1968 年,HP 就已在它的第一款计算器中使用这种输入法了。如果你在互联网上搜索的话,你可以找到很多这些 HP 计算器的爱好者俱乐部。在这篇文章的结尾处,我给出了很多关于这个主题的不错的链接。如今,这些 HP 计算器中的大部分型号都已经是收藏家的藏品了,售价远远高于原来的定价。
本文将给出一些 Linux 下可用的 RPN 计算器 (译注:原文 RPN desktop calculator,desktop 未翻译,如果读者有什么建议可以通知译者,谢谢。)。我们不仅介绍 HP 计算器的模拟器,也介绍其它的、和 HP 毫无瓜葛的 RPN 计算器。
RPN 是什么? 为什么使用 RPN?
RPN 计算器使用一个堆栈,在这个堆栈的表层上对所有的数学运算进行立即计算。这个堆栈被用作是记录在以后的运算中要用到的中间结果的存储器。因此,使用 RPN 计算器,你不再需要任何的括号了。首先,输入数字,压入堆栈,然后就可以对这些数做你想做的操作了。比如说我们要计算:
(( 3 + 1 )^2 + 1) * 4
要计算这个,你应该这么做:
3 enter
1 + (你会立刻看到这个操作的结果: 4)
x^2 (你会立刻看到这个操作的结果: 16)
1+ (你会立刻看到这个操作的结果: 17)
4* (最终结果: 68)
可以看到,输入这个算式只需要9次击键,而且你能看到所有的中间结果。这其实基本上就是如果你不是用计算器,而是进行口算时,在头脑中演算的过程。换句话说,RPN 计算器更加“自然”。它和你的大脑的工作方式是相同的。
如果你把 RPN 计算和一个算术计算器相比较的话,输入相同的算式需要12次击键,而且你看不到中间结果。换句话说,RPN 计算器的优点在于:
- RPM 可以节约时间和击键次数。计算的时候无须考虑括号。计算过成就像你在纸上学算术一样。
- 在计算过程中,你可以看到每个中间结果而不是只得到一个最终答案。这是一个非常有用的副产品。
- 中间结果是用户更容易检查结果、纠正错误,而且可以更容易的跟踪计算的过程。用户可以自己定义操作的优先级。
- RPN 实际上更加合乎逻辑,用户首先输入数据,然后给出对数据如何进行处理。
- 因为使用 RPN,子表达式在输入的同时就被求值了,输入错误更加明显。对于普通的算术计算器,忘了关上一个括号这样的错误往往要在输入之后很久,整个表达式被求值的时候才导致一个计算错误。
计算器
从几个简单的计算器开始吧,你可以在看着便文章的同时用你的浏览器试试这几个计算器,后面我还会介绍一些更强大的“机器”。
rpnjcalc
这个计算器使用了 Javascript。它是我的作品,可以运行在任何现代(!)浏览器上(不能在 opera 5/6, netscape 4, konquerer 中正常工作)。它和很多其它的 Javascript 计算器不同,你可以使用键盘来输入数字和基本的数学运算符。点击这里就可以体验一下 rpnjcalc 了。
hp-35
这个计算器也用了 Javascript,但是它的重点在于模仿了一个真的(老的) HP-35 便携计算器。你可以通过这个链接在线试用它。
不过如果你真想用它的话,我还是建议你下载下面那个 zip 文件,因为这个计算器使用了很多 gif 图,如果你在本机安装它的话,会大幅提高响应速度。注意,这个计算器并没有提供真正的 HP35 的所有功能。比如,它只能用角度(0-360)进行三角计算。
名称: | hp-35 |
主页: | 不详, 从 www.hpmuseum.org 得到。在这里下载:hp-35.zip |
许可证: | GPL |
dc
这个计算器是标准的 Unix 命令。即使是在很老的 unix 系统中,你也可以找它的踪迹。它可以进行最基本的算术运算,但不能处理很大的数。启动计算器只要敲入 dc 就行了,然后输入一个以 k 结尾的数字(比如 6k 然后回车)。这设置了计算的精度,然后就可以进行四则运算了,并可以使用 p 来显示最外层的堆栈。输入 ctrl-d 就退出 dc 了。
名称: | dc (desk calculator) |
主页: | Unix 系统的一部分,Linux 下 dc 的软件包叫做 bc。 |
许可证: | 通常和你的 Unix 系统一样。 |
vc.pl
这个计算器是用 Perl 写成的。这是一个非常有趣的实现,实际上它是一个向量计算器。但显然,你也可以把它用作普通的计算,一个数就是一个一维向量嘛。它集成了一个帮助系统(输入help命令就行了)。安装 vc.pl 非常简单,因为它只使用了标准的 perl 模块。
x48
这个计算器是一个 HP-48 模拟器。也就是说,它可以运行真正 HP 的代码。这个计算器只实现了一个模拟器,你需要下载真正的 HP-48 ROM 代码。x48 是 GPL 的,但显然 ROM 代码是HP 版权所有的。不过 hp48 计算器已经很久不生产了,自从2000年开始,HP 允许下载 hp48 的 ROM 镜像了。注:在屏幕上有这样一个计算器真是不错,但它仍然不可以完全取代 HP-48,因为 x48 的键盘接口不是很好。因而,大部分时间你需要用鼠标在屏幕上点来点去,很影响速度。
因为 x48 是一个模拟器,所以它实际上可以做任何 HP-48 可以做的事情。我能找到的最新的 x48 版本是 0.4,已经很多年了。不过它工作得非常好,没有任何问题。版本 0.4 需要一个小 patch 才可以在现代的 Linux 上编译通过。你可以在下面的 "x48 详细网页" 上面,你可以找到原版手册、一些 ROM 镜像,补丁和一些进阶指导。
hp67
hp67 拥有真正的 hp67 计算器的全部功能,但它是完全重写的版本,与 hp67 的代码独立。它不是一个模拟器。它的界面有点原始(ncurses),但功能非常不错。而且它还有 man page 格式的完善的文档(看下面的链接)。你甚至可以像用 hp67 一样对它进行编程。要开始编程,输入 "prog",然后开始编程,以一个标号开头,并用 "immed" 命令退出编程模式。运行程序只要输入 "run labelname" 就可以了。这有一个例子。这个例子没有什么用,就是计算一下平方,不过它告诉了你如何用 hp67 编程:
prog (enter programming mode)
label myprg
ENTER
*
rtn
immed (end of programming mode)
现在可以用 "run myprg" 计算 x^2.
kalc
kalc 也从命令行运行。它使用了 readline 库,有一些命令行补全功能。它可以进行实数和复数以及无限大整数和任意精度实数的运算。它的文档同样很不错(参见下面的 pdf 文件)。
dcalc
dcalc 也是一个基于 ncurses 的终端窗口中运行的计算器。它没有提供 hp67 那样的可编程性,但进行十六进制、二进制和十进制的转换相当不错。
rpncalc
rpncalc 也是一个终端窗口中运行的 RPN 计算器,但它不是基于 ncurses 的。所以 rpncalc 看起来和 dc 命令非常相似。它实现了 HP28 的功能。因而,rpncalc 比 dc 强很多。它可以处理复数、向量和矩阵。rpncalc 是 Debian 发行版的一部分。
gdcalc
gdcalc 是一个使用 gtk 库的漂亮的图形界面计算器。你可以把它设置成 RPN 输入方式和普通的代数输入方式。它提供了 4 种模式:科学计算、经济计算、统计和一种称为编程模式的数制转换模式。不过这种模式不提供任何对计算器编程的功能(类似 x48 和 hp67 的编程功能)。它可以满足你对一个桌面的计算器的任何需求。
要使用单位换算功能,你需要安装 unit(1) 命令(来自 ftp://ftp.gnu.org/gnu/units/, 已经被大部分 Linux 发行版集成于其中了)。
grpn
这是一个也使用 gtk 库的 RPN 计算器。它提供了基本的代数和三角函数。
galculator
这个计算器的功能和 gdcalc 非常相似。你可以使用 RPN 或代数输入法。它支持二进制、十六进制和十进制的数制转换功能,并有全部基本科学函数。
不过它使用了非常新的 gtk 库 (gtk 2.2)。这样如果你在较老的 Linux 系统里安装它就会遇到一些麻烦。但它确实设计得很不错,界面非常友好。
calcoo
calcoo 是一款非常老的计算器。你可以把它设置为 RPN 或代数模式。它适合进行基本的代数和三角计算。
Kalk
Kalc 是一个简单的(但是 free)Palm 掌上电脑用的 RPN 计算器。它不运行在 Linux 下,不过因为它是 GPL 的(对 palm 软件来说非常罕见),我就把它列在这里了。
GCalc
GCalc 不是一个 RPN 计算器,不过它非常非常有用。它是一个基于 Java 的在线的图形化计算器。要使用它,你需要 mozilla 或 netscape 的 java 插件和 blackdown.org 的部分 jre 包。你可以用 GCalc 直接在一个支持 java 的浏览器里画图。
结论
你在这里能看到各种各样的 RPN 计算器。可能还有更多的,不过上面列出的全都是在 GPL 下发布的。
参考资料
- 下载页面, 计算器的版本是在写本文的时候可用的版本。
- HP48 rom 镜像, 来自 hpcalc.org
- http://www.hpmuseum.org/, 关于全部 hp 计算器的在线博物馆。
- http://www.area48.com/history.html, 著名的 HP48 计算器的历史。
- www.transnull.com/hp48.html, HP48 的 FAQ 和 ROM 镜像。
- www.hp-collection.org/hewlettpackard.htm, 包含几乎所有 HP 计算器的私人收藏页面, 位于德国。
- www.limov.com/rcl20/, RCL 20: People, Dreams & HP Calculators. 一本关于著名的 HP41 的书(没有在线版本)。
- www.finseth.com/~fin/hpdata.html, HP 数据库, 全部 HP 计算器的细节。
- www.hp.com/calculators/, HP 计算器官方网站 (所有上面这些链接都是 HP RPN 爱好者的个人行为。这些天 HP 的页面常常无法访问。挺郁闷的。
对这篇文章发表评论
每篇文章都有各自的反馈页面。在这个页面里,您可以提交评论,也可以查看其他读者的评论:
<--, back to the index of this issue
2004-05-18, generated by lfparser version 2.46