[英]c++ rand() strange behavior
在C ++中使用rand()時,我看到一個非常奇怪的行為。 這是我的代碼。
#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <limits.h>
#define N 10
int main() {
srand(time(NULL));
while(true) {
int i = N * ((double) rand() / (RAND_MAX));
//std::cout << i << std::endl; // If there is any code here, everything goes fine.
if (i == N) {
std::cout << "i " << i << " should never happen" << std::endl;
} else {
std::cout << ".";
}
}
}
這是輸出:
i 10 should never happen
i 10 should never happen
i 10 should never happen
...
這對我來說真的沒有任何意義,因為我認為我永遠不會10歲。奇怪的是,如果我嘗試以下任何一種方法,它都可以正常工作:
我的編譯器是mingw32-g ++。exe(TDM-2 mingw32)4.4.1。
這真的讓我感到困惑,有人可以告訴我發生了什么嗎?
這是可以預期的:
rand()
函數返回一個偽隨機整數,范圍為0到RAND_MAX
(含)(即數學范圍[0,RAND_MAX
])。— 蘭德(3)
因此rand() / RAND_MAX
可以為1,因為范圍是包含在內的。 通常使用RAND_MAX + 1
修復。
話雖這么說,還有更好的選擇來生成在一定范圍內會產生均勻分布的隨機數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.