簡體   English   中英

C ++中從-9到9的隨機數

[英]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。

以下信息已棄用。 它不是在manpages中。 我還建議使用現代 C ++來完成這項任務。

此外, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM