TCL基础教程——(3)数学计算
来源:互联网 发布:jsp页面引入java类 编辑:程序博客网 时间:2024/06/05 08:12
对于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
value和value1分别得到的值是多少?
可能有人会脱口而出,都是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位,第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给出的th
ceil(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)也就是极坐标的r
log(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取1
rand(x)
返回一个0.0到1.0之间的随机数
srand(x)
返回一个0.0到x之间的随机数,x为整数
- TCL基础教程——(3)数学计算
- TCL基础教程——(5)TCL中的结构控制
- TCL基础教程——(1)准备
- TCL基础教程——(6)列表
- TCL基础教程——(8)数组
- TCL基础教程——(2)输出和变量
- TCL基础教程——(4)字符串处理
- TCL基础教程——(7)过程和作用域
- 3D视觉(一)三维数学基础教程和SLAM
- ns2相关学习——TCL脚本编写(3)
- javascript基础教程(—)
- xml基础教程(—)
- Python 3基础教程3-数学运算
- Jakarta Commons——数学计算
- 计算数学(转)
- tcl/tk参考——tcl内建命令
- GPGPU::数学基础教程
- GPGPU::数学基础教程
- NUnit2.0详细使用方法一
- 或许相见,不如怀念...
- 在网页上输出表格的方法
- 为gridview“删除”列添加确认对话框
- 对《.net编程先锋C#》的一些说明
- TCL基础教程——(3)数学计算
- ASP.NET中的数据绑定:哪个更快? (部分源自JGTM'2007 [MVP])
- 载在胜利光环昂首离开!
- TCL基础教程——(4)字符串处理
- 串行通信波特率的一种自动检测方法
- 学习boost的一些我的体会
- TCL基础教程——(5)TCL中的结构控制
- TCL基础教程——(6)列表
- 串口通信基本接线方法