如何控制亂數的出現範圍呢? /信仁君

不管是Fortran、Visual Basic或C/C++等等,
如果要產生 0~9 之間的亂數,就是 random(10)。
如果要產生 1~10 之間的亂數,就是 random(10) + 1。

若不曉得原理的話,只是死記起來,那麼現在想要讓電腦產生兩組亂數群:

分別是讓電腦產生:15 ~ 28 範圍的任意數,
另外也讓電腦產生:-5 ~ 77 範圍的任意數。

請問 random(X)+Y 中,X 與 Y 各是多少呢?如果了解了 random()運作的原理,那麼以後照此推理就永遠忘不了。

先說賓果遊戲想要產生 1 ~ 25 的數字,傳給整數變數 Set,為什麼要寫成 Set = random(25) + 1 呢?因為 random(25) 會產生 0 ~ 24 之間的亂數,加上 1 之後,當然就會產生 1 ~25 之間的亂數了。

那為什麼 random(25) 會產生 0 ~ 24 之間的亂數呢?

random(num)本身會傳回整數值,在內部運作時會產生小於1的小數點,然後和傳進來的 num 相乘,再轉成整數,傳出去給你。

舉個實例如下:

Value = random(25) 傳給 Value 的值是多少呢?內部運作是:25 x Y ( 0 < Y <1 )

產生的最小值:25 x 0.00...001 = 0.00...025 = 0 (取整數)

產生的最大值:25 x 0.99...999 = 24.xxxxxx = 24 (取整數)

哦!原來 0 和 24 是這樣跑出來的呀!因此:Value = random(num) 得到的範圍值是:

( 0 <= Value <= num - 1 )

而Value = random(num) + d
得到的範圍值是:( d <= Value <= num – 1 + d )

於是想要產生 15 ~ 28 之間的亂數計算如下:

已知:d < = Value < = num - 1 + d
因此:15 < = Value < = 28
所以:d = 15
   num - 1 + d = 28
於是:num = 28 - d + 1 = 28 - 15 + 1 = 14

得出:Value = random(14) + 15

於是想要產生 -5 ~ 77 之間的亂數計算如下:

已知:d < = Value < = num - 1 + d
因此:-5 < = Value < = 77
所以:d = -5
   num - 1 + d = 77
於是:num = 77 - d + 1 = 77 - (-5) + 1 = 83

得出:Value = random(83) - 5

這兩個例子歸納得到想要產生 X ~ Y 之間的亂數計算如下:

Value = random( Y - X + 1 ) + X

不過請不要強記這個死公式,不然你會忘光光,牢記 random(num) 函數運作原理,用推的把它推出來,每次我要控制亂數出現的範圍時,都是這樣推出來的。

讀者留言  您的支持與鼓勵才會有更好的作品出來,提供創作者無窮的動力和養分。