现在的位置: 首页 > 综合 > 正文

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

2014年03月17日 ⁄ 综合 ⁄ 共 1818字 ⁄ 字号 评论关闭

对于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

上面的程序计算了7.2除以4的结果为1.8请特别注意中括号[]的用法,它表示括号内内容的值。此方法以后我们会频繁的用到。在这个程序中,就是把1.8赋值给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

valuevalue1分别得到的值是多少?

可能有人会脱口而出,都是1.25,那么看一下实际效果呢?

[ppcorn@localhost ppcorn]$ ./math2.tcl

1

1.25

或许有人会觉得奇怪,为什么呢?这就是因为expr在计算的时候,会认为5是整数类型,4也是整数类型,自然结果就是整数类型,为1,而5.0是浮点数类型,4是整数类型,这样计算的结果取精确度高的,为浮点数,于是得到了1.25

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

[ppcorn@localhost ppcorn]$ cat math3.tcl

#!/usr/bin/tclsh

set value [expr double(5)/4]

puts $value

set value1 [expr 5.0/4]

puts $value1

[ppcorn@localhost ppcorn]$ ./math3.tcl

1.25

1.25

记住,千万不要写成了double(5/4)了,这样会先计算5/4得到了1的结果,然后变为浮点数,也就是1.0而已。

此外,对于无穷小数,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位,第181为无效。

 

那么TCL中究竟支持哪些运算符,又有哪些内置函数呢?下面一一列出。

表格二:TCL中的算术操作符

操作符

说明

- ~ !

一元负,逐位非,逻辑非

* / %

乘,除,取余

+ -

加,减

<< >>

左移位,右移位

< > <= >=

小于,大于,小于等于,大于等于

== !=

等于,不等于

&

逐位与

^

逐位异或

|

逐位或

&&

逻辑与

||

逻辑或

x?y:z

如果x为真则计算y,否则计算z

限于篇幅,我在这里就不细致介绍各个操作符的用法了,有兴趣的自己研究。需要说明其中逐位操作符都是对单个条件操作的,逻辑操作符都是对两个条件操作的,如果这里不明白的话,请参考任何一本较为详细的编程资料。

表格三 TCL内建数学函数

函数

说明

acos(x)

x的反余弦

asin(x)

x的正余弦

atan(x)

x的反正切

atan2(y,x)

直角坐标(x,y)转化为极坐标(r,th)atan2给出的th

ceil(x)

大于或等于x的最小整数

cos(x)

x的余弦

cosh(x)

x的双曲余弦

exp(x)

指数,ex次方

floor(x)

小于或等于x的最大值

fmod(x,y)

x/y的浮点余数

hypot(x,y)

返回sqrt(x*x+y*y)也就是极坐标的r

log(x)

x的自然对数

log10(x)

x10为低的对数

pow(x,y)

xy次方

sin(x)

x的正弦

sinh(x)

x的双曲正弦

sqrt(x)

x的平方根

tan(x)

x的正切

tanh(x)

x的双曲正切

abs(x)

抱歉!评论已关闭.