web-dev-qa-db-ja.com

ランダムな負の数

C++で[-100; +2000]の範囲の数値を生成する必要があります。正の数しか利用できない場合、Randでこれを行うにはどうすればよいですか?速い方法はありますか?

10
Max Frai

0から2100までの乱数を生成してから、100を引きます。

簡単なグーグル検索で Rand()の使用に関する見栄えの良い記事 記事の最後に特定の範囲を操作するためのコード例が含まれています。

36
Kendrick

0から2100までの乱数を生成し、100を引きます。

6
Jez

C++ TR1ランダム関数を使用して、目的の分布で数値を生成できます。

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

std::cout << dist(rng) << '\n';
5
Blastfurnace

0〜2100の数値を生成し、100を引くことはできますか?

4
n8wrl

これがコードです。

#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;
    }

}
4
John Dibling

C++ 0xでは、これを拡張して、標準ライブラリでより適切なサポートを提供します。

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

1
David

現在、私のC++構文は少し錆びていますが、sizeoffsetの2つのパラメーターを受け取る関数を作成する必要があります。

したがって、指定されたsizeを最大値として数値を生成し、その後、それに(負の)オフセットを追加します。

関数は次のようになります。

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

あなたの場合、次のように呼び出されます。

int myValue = GetRandom(2100, -100);
1
Oliver