您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > TCL基础教程数学计算
TCL基础教程——(3)数学计算对于TCL来说,其实并没有自己的数学运算方法,而是使用了C的计算功能,在TCL进行计算的时候,使用expr来调用如expr7.2/4[ppcorn@localhostppcorn]$catmath1.tcl#!/usr/bin/tclshsetvalue[expr7.2/4]puts$value[ppcorn@localhostppcorn]$./math1.tcl1.8上面的程序计算了7.2除以4的结果为1.8,请特别注意中括号[]的用法,它表示括号内内容的值。此方法以后我们会频繁的用到。在这个程序中,就是把1.8赋值给value,然后输出value的值。再看一个程序[ppcorn@localhostppcorn]$catmath2.tcl#!/usr/bin/tclshsetvalue[expr5/4]puts$valuesetvalue1[expr5.0/4]puts$value1value和value1分别得到的值是多少?可能有人会脱口而出,都是1.25,那么看一下实际效果呢?[ppcorn@localhostppcorn]$./math2.tcl11.25或许有人会觉得奇怪,为什么呢?这就是因为expr在计算的时候,会认为5是整数类型,4也是整数类型,自然结果就是整数类型,为1,而5.0是浮点数类型,4是整数类型,这样计算的结果取精确度高的,为浮点数,于是得到了1.25。那么如何让两个整数相除得到一个浮点数呢?总不能总是在整数后面加0吧?对的,在TCL中提供了内置的double方法,完成从整数到浮点数的转换。[ppcorn@localhostppcorn]$catmath3.tcl#!/usr/bin/tclshsetvalue[exprdouble(5)/4]puts$valuesetvalue1[expr5.0/4]puts$value1[ppcorn@localhostppcorn]$./math3.tcl1.251.25记住,千万不要写成了double(5/4)了,这样会先计算5/4得到了1的结果,然后变为浮点数,也就是1.0而已。此外,对于无穷小数,TCL标准输出为12位有效数字,对于一般计算来说足够了。如果觉得不够,我们可以使用内置的变量tcl_precison来控制精度,不过纵然使用了tcl_precison,最高也只能设置为17。[ppcorn@localhostppcorn]$catmath4.tcl#!/usr/bin/tclshsetvalue[expr1.0/3]puts$valuesettcl_precision17setvalue1[expr1.0/3]puts$value1[ppcorn@localhostppcorn]$./math4.tcl0.3333333333330.33333333333333331可以看到上例中,从0开始到最后一个3,恰好为17位,第18位1为无效。那么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给出的thceil(x)大于或等于x的最小整数cos(x)x的余弦cosh(x)x的双曲余弦exp(x)指数,e的x次方floor(x)小于或等于x的最大值fmod(x,y)x/y的浮点余数hypot(x,y)返回sqrt(x*x+y*y)也就是极坐标的rlog(x)x的自然对数log10(x)x以10为低的对数pow(x,y)x的y次方sin(x)x的正弦sinh(x)x的双曲正弦sqrt(x)x的平方根tan(x)x的正切tanh(x)x的双曲正切abs(x)x的绝对值double(x)将x转浮点数int(x)将x转整数round(x)获得最接近x的整数,以小数位0.5为界限,大于等于0.5取1rand(x)返回一个0.0到1.0之间的随机数srand(x)返回一个0.0到x之间的随机数,x为整数
本文标题:TCL基础教程数学计算
链接地址:https://www.777doc.com/doc-2851487 .html