C++で[-100; +2000]の範囲の数値を生成する必要があります。正の数しか利用できない場合、Randでこれを行うにはどうすればよいですか?速い方法はありますか?
0から2100までの乱数を生成してから、100を引きます。
簡単なグーグル検索で Rand()の使用に関する見栄えの良い記事 記事の最後に特定の範囲を操作するためのコード例が含まれています。
0から2100までの乱数を生成し、100を引きます。
C++ TR1ランダム関数を使用して、目的の分布で数値を生成できます。
std::random_device rseed;
std::mt19937 rng(rseed());
std::uniform_int<int> dist(-100,2100);
std::cout << dist(rng) << '\n';
0〜2100の数値を生成し、100を引くことはできますか?
これがコードです。
#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;
}
}
C++ 0xでは、これを拡張して、標準ライブラリでより適切なサポートを提供します。
現在、私のC++構文は少し錆びていますが、size
とoffset
の2つのパラメーターを受け取る関数を作成する必要があります。
したがって、指定されたsize
を最大値として数値を生成し、その後、それに(負の)オフセットを追加します。
関数は次のようになります。
int GetRandom(int size, int offset = 0);
あなたの場合、次のように呼び出されます。
int myValue = GetRandom(2100, -100);