###実現したいこと
線形合同法を使った乱数生成をしたい。
###使用環境
- Linux CentOS7
- Emacs
- Oracle VM VirtualBox
###問題点
最初Windowsでやっていたのですが見ていた資料に、これはBSD系OSの乱数生成法であると書いてあったのでLinux環境に切り替えてやってみようと思いました。そのようにしていたら下記のエラーがでました。
※OSのことがよくわからないのでもしかするとLinuxはBSD系OSではない?
$ g++ File32.cpp -o File32 In file included from /usr/include/c++/4.8.2/random:35:0, from kadai32.cpp:4: /usr/include/c++/4.8.2/bits/c++0x_warning.h:32:2: エラー: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options. #error This file requires compiler and library support for the \ ^
###コード
C++
1//線形合同法 2 3#include<iostream> 4#include<random> 5 6struct RandomNumberGenerator 7{ 8 int val; //乱数生成器の内部状態を表す 9 10 //乱数を生成するメンバ関数 11 int next_random_value() 12 { 13 int num=((long long)1<<31)-1; //2147483647 14 //val=((long long)val*(long long)16807)%2147483647; 15 val=((long long)val*(long long)16807)%num; 16 return val; 17 } 18 19 //乱数の種を設定するメンバ関数 20 void seed(int sd) 21 { 22 val=sd; 23 } 24}; 25 26int main() 27{ 28 RandomNumberGenerator random={1}; //乱数生成器オブジェクトの作成 29 int rans,i; 30 //↑データメンバvalは1に初期化される 31 for(i=0;i<5;i++){ 32 rans=random.next_random_value(); //乱数値の生成 33 std::cout<<rans<<", "; //出力を5回繰り返す 34 } 35 random.seed(1); 36 37 for(i=0;i<5;i++){ 38 rans=random.next_random_value(); 39 std::cout<<rans<<", "; 40 } 41 42 return 0; 43}
回答4件
あなたの回答
tips
プレビュー