Random and negative numbers

前端 未结 7 707
鱼传尺愫
鱼传尺愫 2021-01-17 14:52

I have to generate numbers in range [-100; +2000] in c++. How can I do this with rand if there is only positive numbers available? Are there any fast ways?<

相关标签:
7条回答
  • 2021-01-17 15:13

    Here is the code.

    #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 讨论(0)
  • 2021-01-17 15:15

    generate a random number between 0 and 2100 then subtract 100.

    A quick google search turned up a decent looking article on using Rand(). It includes code examples for working with a specific range at the end of the article.

    0 讨论(0)
  • 2021-01-17 15:27

    Currently my C++ syntax is a little rusty, but you should write a function that takes two parameters: size and offset.

    So you generate numbers with the given size as maximum value and afterwards add the (negative) offset to it.

    The function would look like:

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

    and would be called in your case with:

    int myValue = GetRandom(2100, -100);
    
    0 讨论(0)
  • 2021-01-17 15:33

    In C++0x they will enhance this to provide better support for it with a standard library.

    http://www2.research.att.com/~bs/C++0xFAQ.html#std-random

    0 讨论(0)
  • 2021-01-17 15:35

    You can use the C++ TR1 random functions to generate numbers in the desired distribution.

    std::random_device rseed;
    std::mt19937 rng(rseed());
    std::uniform_int_distribution<int> dist(-100,2100);
    
    std::cout << dist(rng) << '\n';
    
    0 讨论(0)
  • 2021-01-17 15:35

    Generate a random number between 0 and 2100, and subtract 100.

    0 讨论(0)
提交回复
热议问题