2010-09-30 55 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