awk學習筆記(15)-數學函式及隨機數
awk中的數學函式如下表:
函式名 | 說明 |
atan2( y, x ) | 返回 y/x 的反正切。 |
cos( x ) | 返回 x 的餘弦;x 是弧度。 |
sin( x ) | 返回 x 的正弦;x 是弧度。 |
exp( x ) | 返回 x 冪函式。 |
log( x ) | 返回 x 的自然對數。 |
sqrt( x ) | 返回 x 平方根。 |
int( x ) | 返回 x 的截斷至整數的值。 |
rand( ) | 返回任意數字 n,其中 0 <= n < 1。 |
srand( [Expr] ) | 將 rand 函式的種子值設定為 Expr 引數的值,或如果省略 Expr 引數則使用某天的時間。返回先前的種子值。 |
測試程式1
為了測試多個數學函式,編寫了測試程式檔案math.awk:
- BEGIN{
- OFMT=“%.3f”;
- rs[0]=atan2(5,2);
- rs[1]=cos(2);
- rs[2]=sin(1);
- rs[3]=exp(10);
- rs[4]=log(10);
- rs[5]=sqrt(16);
- rs[6]=int(3.1415);
- len = length(rs);
- for(i=0; i<len; i++)
- {
- print rs[i];
- }
- }
輸出結果:
- 1.190
- -0.416
- 0.841
- 22026.466
- 2.303
- 4
- 3
測試程式2
下面用簡單的命令列程式來測試一下awk的隨機數:
- awk `BEGIN{print rand()}`
上面的程式試圖呼叫rand函式產生一個隨機數,實際的結果如下:
- 0.840188
反覆執行多遍也是這個結果。
要想在awk中產生隨機數,需要如下編寫:
- awk `BEGIN{srand();print rand()}`
執行兩遍看下結果:
- 0.638082
- 0.349
在awk中,需要先呼叫srand函式產生隨機種子,再呼叫rand來產生隨機數。srand預設是用時間來做種子。
很不幸的是,awk的隨機函式隨機性並不好,只能做簡單的應用。為什麼這麼說?上面的程式碼如果在很短的時間間隔裡執行,會產生相同的隨機數。
是否可以產生隨機性更好的隨機數呢?srand不是有個可選的引數麼?好吧,我們來試試。首先我們先試下php中的微秒函式microtime,它可以獲得微秒級的時間。用它來做為隨機種子應該OK吧。於是,寫了下面的程式碼:
- php -r “echo microtime(true);”|awk `{srand($0);print rand()}`
效果如何呢?在很1秒鐘之內多次執行時仍然會產生多個相同的隨機數,可見,即使指定了隨機種子也不能保證其足夠的隨機。可以對比一下php的隨機函式mt_rand,看看它的效果如何:
- php -r “echo mt_rand(100000000, 999999999);”|awk `{print}`
在很短的時間內執行多次產生的隨機數沒有相同的,這明顯要比awk的效果要好。
目前為止,還沒有找到用純的awk函式能產生隨機性較好的隨機數的辦法。或許這是mac os的問題,有空會在別的linux系統試一下。
本文轉自 ustb80 51CTO部落格,原文連結:http://blog.51cto.com/ustb80/1045231,如需轉載請自行聯絡原作者
相關文章
- MYSQL學習筆記15: 數值函式MySql筆記函式
- java Math數學工具及Random隨機函式Javarandom隨機函式
- numpy學習回顧-數學函式及邏輯函式函式
- AWK 學習筆記筆記
- 【學習筆記】數學筆記
- Java學習隨筆(函式式介面)Java函式
- Python零基礎學習筆記(九)——隨機數Python筆記隨機
- 數學隨筆
- Tensorflow學習筆記: 變數及共享變數筆記變數
- JSP學習筆記(六十三):java中生成隨機數JS筆記Java隨機
- ssy中學暑假集訓有關數學及多項式學習筆記筆記
- async函式學習筆記。函式筆記
- Go 函式 學習筆記Go函式筆記
- 分析函式(學習筆記)函式筆記
- 生成函式 學習筆記函式筆記
- 【學習筆記】組合數學筆記
- 數學證明 學習筆記筆記
- 高等數學學習筆記(一)筆記
- 高等數學學習筆記(二)筆記
- 組合數學學習筆記筆記
- 初中數學隨筆
- C#學習 數學函式(21)C#函式
- go 學習筆記之學習函數語言程式設計前不要忘了函式基礎Go筆記函數程式設計函式
- 深度學習——loss函式的學習筆記深度學習函式筆記
- 《從零開始學Swift》學習筆記(Day 19)——函式引數傳遞Swift筆記函式
- OC常用數學函式及常量函式
- 數論學習筆記 (2):質數筆記
- Oracle取隨機數函式Oracle隨機函式
- 數學函式函式
- Swift學習筆記(三十)——函式的內部引數名和外部引數名Swift筆記函式
- TS學習筆記(四):函式筆記函式
- JavaScript學習筆記 - 原生函式JavaScript筆記函式
- Golang學習筆記-1.6 函式Golang筆記函式
- Oracle學習筆記(6)——函式Oracle筆記函式
- LoadRunner函式學習筆記函式筆記
- MYSQL學習筆記14: 函式MySql筆記函式
- 【函式】Oracle函式系列(2)--數學函式及日期函式函式Oracle
- 學習筆記:數位dp筆記