メルセンヌツイスターによる乱数の使い方
メルセンヌツイスターによる乱数を生成したいのですが、下記コードにすると、mt_rand関数を呼ぶたびにシードが初期化され他乱数が生成されます。
やりたいことは、main関数で一度シード101で初期化した後は、mt_rand関数内では、初期化することなく継続した乱数を生成したいのです。
そのためa_mt_rand関数のようにすると、mtが定義されていないとなるエラーとなります。
namespaceの問題と思うのですが、色々試してみましたが、できませんでした。
どのようにすればできるでしょうか。
vc++11、windows11 使用
参考サイト
C++ 乱数ライブラリ std::random の使い方
リンクはうまく貼れませんでした。
#pragma hdrstop
#include <iostream>
#include <stdio.h>
#include <random>
using namespace std;
void mt_rand(void);
int main(int argc, char *argv[])
{
int ptr;
std::mt19937 mt(101); // メルセンヌツイスターの32ビット版、引数は初期シード
std::uniform_int_distribution <> rand100(0, 100); // [0, 99] 範囲の一様乱数
ptr = rand100(mt);
printf("ptr=%d\n",ptr);
mt_rand();
}
void mt_rand(void)
{
int ptr=0;
std::mt19937 mt(101); // メルセンヌツイスターの32ビット版、引数は初期シード
std::uniform_int_distribution <> rand100(0, 100); // [0, 99] 範囲の一様乱数
ptr = rand100(mt);
printf("%d\n",ptr);
}
void a_mt_rand(void)
{
int ptr=0;
ptr = rand100(mt);
printf("%d\n",ptr);
}
お礼
早速のご回答ありがとうございました。