TCL:关于Mpexpr和expr命令

时间:2013-09-11 09:22:03

标签: tcl

我正在使用32位Linux机器并使用TCL 8.5版本。当我想计算超过4字节整数时,我得到错误。但是我可以使用“Mpexpr”包来做同样的事情。我的疑问是,我的数据总线大小为32位但是当我安装Mpexpr软件包时,我能够处理8字节整数,Mpexpr如何工作以及32位数据总线如何突然扩大到64位。我想知道内部的事情是如何运作的。

% set tcl_platform(wordSize)

4

%

1 个答案:

答案 0 :(得分:0)

我想你可能会有些困惑。 Tcl 8.5内部使用自己的任意精度整数算术库(libtommath的一个分支),它应该总是表现为整数是无限宽度的; 实际表示在C longlong long和实际任意精度类型之间来回交换(这是一件好事,因为使用本机数字类型要快得多) )。除了使用显式的“强制转换”Tcl函数int()wide()之外,您永远不应该编写一个观察差异的脚本。

在使用Tcl 8.4(或更早版本)时,您更有可能观察到您所描述的问题,其中没有内置的任意精度算术支持,您必须使用mpexpr软件包。

至于事情如何运作,这从根本上源于Tcl中的值不需要表示为系统整数的事实;还有许多其他可能的表述。例如,可以使用long long,这是普通32位系统上的64位宽整数。对于较大的类型,表示实际上通常是“数字”序列,其中每个“数字”在0-255范围内;然后算术运算只需遵循传统规则进行长时间加法,长时间乘法等,正如学校所教导的那样。除了要考虑的十位数以外。 (实际上,他们可以为每个数字使用C unsigned short而不是unsigned char,给出范围0-65535。)有相当多的专业算法可以让您更快地完成更高级的操作;我会让你做自己的文献搜索......