如何控制亂數的出現範圍呢? /信仁君
文章推薦指數: 80 %
如何控制亂數的出現範圍呢? /信仁君. 不管是Fortran、Visual Basic或C/C++等等, 如果要產生0~9 之間的亂數,就是random(10)。
如果要產生1~10 之間的亂數, ...
如何控制亂數的出現範圍呢?/信仁君
不管是Fortran、VisualBasic或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的值是多少呢?內部運作是:25xY(0<Y<1)
產生的最小值:25x0.00...001=0.00...025=0(取整數)
產生的最大值:25x0.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)函數運作原理,用推的把它推出來,每次我要控制亂數出現的範圍時,都是這樣推出來的。
讀者留言  您的支持與鼓勵才會有更好的作品出來,提供創作者無窮的動力和養分。
延伸文章資訊
- 1在C++ 中生成指定範圍內的隨機數 - Techie Delight
这篇文章将讨论如何在C++ 中生成指定范围内的随机数. ... int random(int low, int high) ... 標頭中還有其他幾個預定義的隨機數生成器 <random> , ...
- 2【教學】『C/C++』利用rand()及srand()產生整數亂數、小數亂數
rand()這個函數會隨機產生0~RAND_MAX的數字,而RAND_MAX為編譯器設定的數字,可以用Printf("%d",RAND_MAX)來查看。要產生特定範圍的亂數只要先產生0~1 ...
- 3C/C++ 使用rand 函數產生隨機亂數教學與範例程式碼- G. T. Wang
上面的程式中我們將 rand 函數所產生整數除以 RAND_MAX + 1.0 ,就可以得到 [0, 1) 這個範圍的浮點數亂數(也就是 0 <= x < 1 )。 特定範圍浮點數亂數.
- 4如何控制亂數的出現範圍呢? /信仁君
如何控制亂數的出現範圍呢? /信仁君. 不管是Fortran、Visual Basic或C/C++等等, 如果要產生0~9 之間的亂數,就是random(10)。 如果要產生1~10 之間的亂數...
- 5C/C++ 產生指定範圍的亂數 - 培哥的演算法筆記
rand() 可以產生一個亂數,不過你會發現,每次產生的亂數都相同。因此我們在使用rand() 之前,要加上一個srand() 函式,它需要一個參數seed, ...