質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

4回答

2559閲覧

乱数生成法によるコンパイルエラー

langhtorn

総合スコア105

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

VirtualBox

VirtualBoxは、現在米オラクル社が開発している、 x86仮想化ソフトウェア・パッケージの一つです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/07/17 07:30

編集2020/07/17 10:33

###実現したいこと
線形合同法を使った乱数生成をしたい。
###使用環境

  • 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}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2020/07/17 09:36 編集

>LinuxはBSD系OSではない?・・・はい、違います。 で、 xが初期化されずに使われていますが?→ val=((long long)x*(long long)16807)%num; あと、warning: use of old-style castって怒られますw ・・・BSDって、clangだからlongは64ビットじゃなかったけ?
langhtorn

2020/07/17 10:35

xは正しくはvalの間違いです。すみません。
guest

回答4

0

VScode で実行してみたらできました。
資料にはMac限定のように書いてあったのですが勘違いみたいです。
実行結果はこのようになりました。

16807, 282475249, 1622650073, 984943658, 1144108930, 16807, 282475249, 1622650073, 984943658, 1144108930,

投稿2020/07/18 04:38

langhtorn

総合スコア105

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Windows(VisualStudio)でも難なくコンパイル通りました。

OSのことがよくわからないので

わからないことはこれから知ればいいですけれど、わからない現象を全てよくわからないなにかのせいにしてはいけません。

投稿2020/07/18 04:22

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

BAが出てますが・・・・
手元のFreeBSDでコンパイルしてみました。

text

1vr ~/Project % c++ t278451.cpp 2t278451.cpp:13:19: warning: 'long long' is incompatible with C++98 [-Wc++98-compat-pedantic] 3 int num=((long long)1<<31)-1; //2147483647 4 ^ 5t278451.cpp:13:18: warning: use of old-style cast [-Wold-style-cast] 6 int num=((long long)1<<31)-1; //2147483647 7 ^ ~ 8t278451.cpp:15:15: warning: 'long long' is incompatible with C++98 [-Wc++98-compat-pedantic] 9 val=((long long)val*(long long)16807)%num; 10 ^ 11t278451.cpp:15:14: warning: use of old-style cast [-Wold-style-cast] 12 val=((long long)val*(long long)16807)%num; 13 ^ ~~~ 14t278451.cpp:15:30: warning: 'long long' is incompatible with C++98 [-Wc++98-compat-pedantic] 15 val=((long long)val*(long long)16807)%num; 16 ^ 17t278451.cpp:15:29: warning: use of old-style cast [-Wold-style-cast] 18 val=((long long)val*(long long)16807)%num; 19 ^ ~~~~~ 206 warnings generated. 21svr ~/Project % ./a.out 2216807, 282475249, 1622650073, 984943658, 1144108930, 16807, 282475249, 1622650073, 984943658, 1144108930, svr ~/Project % 23

環境など・・・
svr ~/Project % uname -a
FreeBSD svr.cateye.jp 12.1-RELEASE-p6 FreeBSD 12.1-RELEASE-p6 GENERIC amd64
svr ~/Project % c++ --version
FreeBSD clang version 8.0.1 (tags/RELEASE_801/final 366581) (based on LLVM 8.0.1)
Target: x86_64-unknown-freebsd12.1
Thread model: posix
InstalledDir: /usr/bin
オプション
clang++ -pipe -Weverything -Ofast

投稿2020/07/18 04:16

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

langhtorn

2020/07/18 04:41

ありがとうございます。参考になりました。
guest

0

ベストアンサー

C

1#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.

エラーメッセージのとおりです。<random>ヘッダは、C++11以上の環境でのみ利用可能です。

投稿2020/07/17 07:41

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

langhtorn

2020/07/17 10:34

使っているOSのバージョンが古いということでしょうか。
cateye

2020/07/17 11:08 編集

コンパイルオプションに-std=c++11を付けましょう。 ・・・今どきのコンパイラなら対応してると思います。
SHOMI

2020/07/17 13:32

そもそもこのコードにrandomヘッダいりませんよね…
langhtorn

2020/07/18 04:06

わかりました。みなさんありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問