2010-09-30 52 views
9

我必須生成範圍[-100; + 2000] in C++。如果只有正數可用,我怎樣才能用rand來做到這一點?有沒有什麼快捷方式?隨機和負數

回答

4

你能從0-2100產生一個數字並減去100嗎?

6

生成一個0到2100之間的隨機數,然後減去100.

3

這是代碼。

#include <cstdlib> 
#include <ctime> 

int main() 
{ 
    srand((unsigned)time(0)); 
    int min = 999, max = -1; 
    for(size_t i = 0; i < 100000; ++i) 
    { 
     int val = (rand()%2101)-100; 
     if(val < min) min = val; 
     if(val > max) max = val; 
    } 

} 
+0

這不會給出均勻分佈!另外,找到100000個這樣的數字的最小值和最大值與該問題無關。 – darklon 2010-09-30 13:49:12

+0

另外,如果偶然'val'每次都是'-100',那麼產生的'max'將是錯誤的。同上最低。 – 2010-09-30 15:36:44

+0

@Cornelius,@Ben:誰在乎?這只是一個演示。如果我只發佈了'(rand()%2101)-100',那會比可編譯的,可運行的樣本更好?請。 – 2010-09-30 16:08:18

1

目前我的C++語法是有點生疏,但你應該編寫一個函數,有兩個參數:sizeoffset

因此,您可以生成具有給定size的數字作爲最大值,然後爲其添加(負)偏移量。

的功能將類似於:

int GetRandom(int size, int offset = 0); 

,並會在你的情況可以這樣調用:

int myValue = GetRandom(2100, -100); 
5

可以使用C++ TR1隨機函數來生成所期望的分配號碼。

std::random_device rseed; 
std::mt19937 rng(rseed()); 
std::uniform_int<int> dist(-100,2100); 

std::cout << dist(rng) << '\n'; 
+0

對於沒有TR1的人來說,boost :: random非常接近。 – MSalters 2010-10-01 08:28:37