搜索
您的当前位置:首页正文

TCL基础教程——数学计算

来源:小奈知识网


TCL基础教程——数学计算

———————————————————————————————— 作者: ———————————————————————————————— 日期:

2

个人收集整理 勿做商业用途

TCL基础教程——(3)数学计算

对于TCL来说,其实并没有自己的数学运算方法,而是使用了C的计算功能,在TCL进行计算的时候,使用expr来调用如expr 7。2/4

[ppcorn@localhost ppcorn]$ cat math1.tcl #!/usr/bin/tclsh set value [expr 7。2/4] puts $value [ppcorn@localhost ppcorn]$ 。/math1.tcl 1。8 上面的程序计算了除以4的结果为,请特别注意中括号[]的用法,它表示括号内内容的值.此方法以后我们会频繁的用到.在这个程序中,就是把赋值给value,然后输出value的值。

再看一个程序

[ppcorn@localhost ppcorn]$ cat math2。tcl #!/usr/bin/tclsh set value [expr 5/4] puts $value set value1 [expr 5。0/4] puts $value1 value和value1分别得到的值是多少?

可能有人会脱口而出,都是1。25,那么看一下实际效果呢? [ppcorn@localhost ppcorn]$ 。/math2.tcl 1 1。25 或许有人会觉得奇怪,为什么呢?这就是因为expr在计算的时候,会认为5是整数类型,4也是整数类型,自然结果就是整数类型,为1,而5。0是浮点数类型,4是整数类型,这样计算的结果取精确度高的,为浮点数,于是得到了。

那么如何让两个整数相除得到一个浮点数呢?总不能总是在整数后面加0吧?对的,在TCL中提供了内置的double方法,完成从整数到浮点数的转换.

[ppcorn@localhost ppcorn]$ cat math3.tcl #!/usr/bin/tclsh 3

个人收集整理 勿做商业用途

set value [expr double(5)/4] puts $value set value1 [expr 5.0/4] puts $value1 [ppcorn@localhost ppcorn]$ 。/math3.tcl 1。25 记住,千万不要写成了double(5/4)了,这样会先计算5/4得到了1的结果,然后变为浮点数,也就是而已。

此外,对于无穷小数,TCL标准输出为12位有效数字,对于一般计算来说足够了.如果觉得不够,我们可以使用内置的变量tcl_precison来控制精度,不过纵然使用了tcl_precison,最高也只能设置为17.

[ppcorn@localhost ppcorn]$ cat math4。tcl #!/usr/bin/tclsh set value [expr 1.0/3] puts $value set tcl_precision 17 set value1 [expr 1.0/3] puts $value1 [ppcorn@localhost ppcorn]$ ./math4.tcl 0。333333333333 0。33333333333333331 可以看到上例中,从0开始到最后一个3,恰好为17位,第18位1为无效。

那么TCL中究竟支持哪些运算符,又有哪些内置函数呢?下面一一列出. 表格二:TCL中的算术操作符 操作符 - ~ ! * / % 说明 一元负,逐位非,逻辑非 乘,除,取余 4

个人收集整理 勿做商业用途

+ — <〈 >〉 〈 〉 <= 〉= == != & ^ | && || x?y:z 加,减 左移位,右移位 小于,大于,小于等于,大于等于 等于,不等于 逐位与 逐位异或 逐位或 逻辑与 逻辑或 如果x为真则计算y,否则计算z 限于篇幅,我在这里就不细致介绍各个操作符的用法了,有兴趣的自己研究。需要说明其中逐位操作符都是对单个条件操作的,逻辑操作符都是对两个条件操作的,如果这里不明白的话,请参考任何一本较为详细的编程资料。

表格三 TCL内建数学函数 函数 acos(x) asin(x) atan(x) atan2(y,x) ceil(x) cos(x) cosh(x) exp(x) 说明 x的反余弦 x的正余弦 x的反正切 直角坐标(x,y)转化为极坐标(r,th),atan2给出的th 大于或等于x的最小整数 x的余弦 x的双曲余弦 指数,e的x次方 5

个人收集整理 勿做商业用途

floor(x) fmod(x,y) hypot(x,y) log(x) log10(x) pow(x,y) sin(x) sinh(x) sqrt(x) tan(x) tanh(x) abs(x) double(x) int(x) round(x) rand(x) srand(x) 小于或等于x的最大值 x/y的浮点余数 返回sqrt(x*x+y*y)也就是极坐标的r x的自然对数 x以10为低的对数 x的y次方 x的正弦 x的双曲正弦 x的平方根 x的正切 x的双曲正切 x的绝对值 将x转浮点数 将x转整数 获得最接近x的整数,以小数位为界限,大于等于0。5取1 返回一个到之间的随机数 返回一个到x之间的随机数,x为整数

6

因篇幅问题不能全部显示,请点此查看更多更全内容

Top