0107期:106期衍生的取亂數的問題
[From Archer]
我想到的是另外一個問題, 亂數的取法有很多種, 有的用時間, 有的用的是線性的演算法! 前一些新聞有爆出說用電腦選的亂數選出來都一樣, 姑且不論這個新聞是真是假, 但是取亂數真的是很大的學問!
要如何驗證呢? 非常簡單
要知道 PI(圓週率)是如何計算的嗎?
你可以取兩個0-1之間的亂數m組, 然後計算 SQR(x^2+y^2) 只要是小於1的個數為n ,只要m 的個數夠大的時候 n/m大概會等於 PI/4 =3.141592653/4...........
如果你寫一個程式跑出來亂數不等於這個, 那就是你取亂數的程式有問題囉!
先談談 Archer 提供的方法 ,如果真的要採用這個方法 ,我會選擇計算 x^2 + y^2 就可以了 ,因為 1^2還是 1, 這樣可以減少做開根號這個複雜的運算 . Archer 的方法基本上是利用面積的比例去進行推測 ,整個正方型 (1x1)的面積為 1 , 半徑為 1 的 1/4圓面積為 PI*(1^2)/4 = PI/4 , 所以機率才是 PI/4 .
基本上 ,Archer提供的方法只驗證了平均性 ,但沒有驗證隨機性 ,舉個例子來說好了 ,我的亂數表 ,如果是依序產生 0-9的數字 ,但我的數字永遠是 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 依序產生 ,那這樣的亂數表 ,還是符合平均性的問題 .但是卻沒有考慮到隨機性 .
一般的亂數的產生方式 ,是以一個種子值 k ,以一個函式比如( (k * q )+ n % p)去計算下一個隨機值為何 ,前例說的電腦選的亂數都一樣 ,我猜這個程式設計師一定忘了每個想取亂數的程式一開始一定要先把亂數種子值弄亂(一般常用執行時的時間) .
不過亂數的如何產生其實也是大學問 ,整個隨機數序列的要求是不能有任何軌跡可尋 ,以避免可以預測下一個號碼 ,當你如果是在寫作一些跟這類取樣有關的程式 ,才不會取得重複的樣本 .
記得高中課本後面就有簡單的亂數表 ,那就是沒有電腦時代 ,利用簡單的數字做出來隨機數序列 ,所謂條條大路通羅馬 ,也沒有人會規定你該選用什麼方式去取出這個亂數的 .
我想到的是另外一個問題, 亂數的取法有很多種, 有的用時間, 有的用的是線性的演算法! 前一些新聞有爆出說用電腦選的亂數選出來都一樣, 姑且不論這個新聞是真是假, 但是取亂數真的是很大的學問!
要如何驗證呢? 非常簡單
要知道 PI(圓週率)是如何計算的嗎?
你可以取兩個0-1之間的亂數m組, 然後計算 SQR(x^2+y^2) 只要是小於1的個數為n ,只要m 的個數夠大的時候 n/m大概會等於 PI/4 =3.141592653/4...........
如果你寫一個程式跑出來亂數不等於這個, 那就是你取亂數的程式有問題囉!
先談談 Archer 提供的方法 ,如果真的要採用這個方法 ,我會選擇計算 x^2 + y^2 就可以了 ,因為 1^2還是 1, 這樣可以減少做開根號這個複雜的運算 . Archer 的方法基本上是利用面積的比例去進行推測 ,整個正方型 (1x1)的面積為 1 , 半徑為 1 的 1/4圓面積為 PI*(1^2)/4 = PI/4 , 所以機率才是 PI/4 .
基本上 ,Archer提供的方法只驗證了平均性 ,但沒有驗證隨機性 ,舉個例子來說好了 ,我的亂數表 ,如果是依序產生 0-9的數字 ,但我的數字永遠是 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 依序產生 ,那這樣的亂數表 ,還是符合平均性的問題 .但是卻沒有考慮到隨機性 .
一般的亂數的產生方式 ,是以一個種子值 k ,以一個函式比如( (k * q )+ n % p)去計算下一個隨機值為何 ,前例說的電腦選的亂數都一樣 ,我猜這個程式設計師一定忘了每個想取亂數的程式一開始一定要先把亂數種子值弄亂(一般常用執行時的時間) .
不過亂數的如何產生其實也是大學問 ,整個隨機數序列的要求是不能有任何軌跡可尋 ,以避免可以預測下一個號碼 ,當你如果是在寫作一些跟這類取樣有關的程式 ,才不會取得重複的樣本 .
記得高中課本後面就有簡單的亂數表 ,那就是沒有電腦時代 ,利用簡單的數字做出來隨機數序列 ,所謂條條大路通羅馬 ,也沒有人會規定你該選用什麼方式去取出這個亂數的 .
















