[英]random number from -9 to 9 in C++
只是想知道,如果我有以下代碼:
int randomNum = rand() % 18 + (-9);
這會創建一個從-9到9的隨機數嗎?
不,它不會。 您正在尋找:
int randomNum = rand() % 19 + (-9);
-9和+9之間有19個不同的整數(包括兩者),但rand() % 18
只提供18種可能性。 這就是你需要使用rand() % 19
。
您的代碼返回介於(0-9和17-9)=( - 9和8)之間的數字。
供您參考
rand() % N;
返回0到N-1之間的數字:)
正確的代碼是
rand() % 19 + (-9);
不要忘記新的C ++ 11偽隨機功能 ,如果你的編譯器已經支持它,它可以是一個選項。
偽代碼:
std::mt19937 gen(someSeed);
std::uniform_int_distribution<int> dis(-9, 9);
int myNumber = dis(gen)
你是對的,在-9和9(含)之間有18個計數數字。
但是計算機使用包含零的整數(Z集),這使得它成為19個數字。
從rand()到RAND_MAX的最小比率為0,因此您需要減去9以得到-9。
此外, rand函數的聯機幫助頁引用:
“如果你想生成一個介於1和10之間的隨機整數,你應該總是使用高位來實現它,就像在
j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));
從來沒有任何類似的東西
j = 1 + (rand() % 10);
(使用低階位)。“
所以在你的情況下,這將是:
int n= -9+ int((2* 9+ 1)* 1.* rand()/ (RAND_MAX+ 1.));
無論什么時候你有疑問,你都可以運行一個循環,用原始算法獲得1億個隨機數,得到最低和最高值,看看會發生什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.