如何控制亂數的出現範圍呢? /信仁君
文章推薦指數: 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++ 中生成範圍內的隨機數 - Delft Stack
創建時間: November-24, 2020. 使用C++11 <random> 庫生成一個範圍內的隨機數; 使用 rand 函式生成一個範圍內的隨機數. 本文將演示多種C++ 方法,講述如何...
- 2亂數生成· 中二中電研C++ 教學講義 - GitLab
隨機數的使用: rand(). 在C++中,最簡單的隨機數產生函式為 <cstdlib> 函式庫中的 rand() ... 利用除法取餘數運算子( % ),可以進一步取出特定範圍亂數。 rand...
- 3在C++ 中生成指定範圍內的隨機數 - Techie Delight
这篇文章将讨论如何在C++ 中生成指定范围内的随机数. ... int random(int low, int high) ... 標頭中還有其他幾個預定義的隨機數生成器 <random> , ...
- 4C/C++ 使用rand 函數產生隨機亂數教學與範例程式碼- G. T. Wang
上面的程式中我們將 rand 函數所產生整數除以 RAND_MAX + 1.0 ,就可以得到 [0, 1) 這個範圍的浮點數亂數(也就是 0 <= x < 1 )。 特定範圍浮點數亂數.
- 5[C&++] 亂數基本使用@ Edison.X. Blog
[亂數] <細說> C/C++ 亂數基本使用與常見問題 ... 接著呼叫rand() 便可產生隨機亂數,隨機亂數的範圍為0 ~RAND_MAX,RAND_MAX 為一macro,在我的電腦 ...