TCL基礎教程 (3)數學計算

2021-05-01 07:43:30 字數 2932 閱讀 5823

對於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.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為整數

python基礎教程3

1.序列解包 賦值時可以多個變數同時賦值。x,y,z 1,2,3 print x,y,z 1 2 3還可以交換變數的值 x,y y,x print x,y,z 2 1 3實際上,這裡執行的操作稱為序列解包 或可迭代物件解包 將乙個序列 或任何可迭代 物件 解包,並將得到的值儲存到一系列變數中。下面用...

vbs基礎教程3

接著上節課,我們來學判斷結構。在學判斷結構之前,我們首先要了解乙個新的概念 布林值 boolean 所謂布林值,這種變數只有兩個可能 真 true 或假 flase 這種變數在某些情況下很有用 比如 開關 我們定義乙個boolean變數的方法和其他變數一樣,賦值也一樣,例如 dim a,b a tr...

Git基礎教程(3)

git基礎使用中的常用命令,持續更新 git config list 檢視配置資訊 git config user.name 檢視當前賬號 git config user.email 檢視當前email git status 檢視完整add檔案 git status s 看看簡略add檔案 git ...