Cに標準で使える乱数の関数はそのままで使うなとよく聞きます。
自分でもこの辺とか読んでみたんですけど、
http://www001.upp.so-net.ne.jp/isaku/rand.html
gccについては何故よくないかわかりました。
下位ビットを見ると0と1が交互に出てくるんですね。
私はVC++を使っているのですがそれでも良くないんでしょうか?
具体的にどのようにVC++のrandは良くないんでしょうか。
書き足らない部分があれば補足します、よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
> 私はVC++を使っているのですがそれでも良くないんでしょうか?
お示しになった、
http://www001.upp.so-net.ne.jp/isaku/rand.html
のrand( )その2でVC++は、
static long x=S;
int rand() { x=x*A+C; return(int)(x>>16)&32767; }
void srand(unsigned s) { x=s; if (F) rand(); }
で、A=214013, C=2531011, F=0, S=1
と解析されたとかかれていますね。
線形合同法ですので、glibcと同様の欠点を持ちます。
線形合同法の欠点を引用すれば…
rand( ) その1、rand( ) その2、drand48( ) は線形合同法で乱数を発生させている。この方法に共通する欠点は、ある乱数が得られたら、次に現れる乱数が限られてしまうことだ。とくに、rand( ) その1と、 drand48( ) は、次の乱数が完全に決まってしまう。この欠点は乱数を組にして使うと問題になる。例えば2次元ベクトル(x,y)を線形合同法で発生させると、限られたベクトルしか現れない。
と言うわけで良質な乱数が必要ならVC++でも、メルセンヌ・ツイスタを使おうとなるわけですね。
No.3
- 回答日時:
線形合同法の性能がそれほど高くないことは確かですが、「使うな」となるかどうかは実際の要求レベルによって異なります。
ちょっとしたランダムな処理が必要なだけであればrand関数は十分役に立ちます。逆に、高度な数値シミュレーションなどでは使い物にならないでしょう。メルセンヌ・ツイスタなどを使えば確かに疑似乱数の性能は向上しますが、パフォーマンスは低下します。
要するに、大切なのは何に使うかです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 統計学 Excelによるサンプルの拡大について 6 2023/08/22 16:03
- 工学 疑似乱数生成器 3 2023/01/05 02:06
- PHP csvファイルについて教えて下さい。 2 2023/04/01 19:59
- オンラインゲーム VCしながらゲームしたい… 2 2022/06/11 16:04
- 統計学 直線の傾き(回帰係数)から相関係数を計算できるのでしょうか? 2 2022/09/16 19:28
- 学校 ダサいですか、高校生、運動部の練習着 中学の時は部活の練習着と試合着を購入させられて使用してたので何 1 2022/04/16 19:14
- その他(コンピューター・テクノロジー) ハードドライブのデータ記憶方法 USBメモリーなどの半導体記憶デバイスは、ビット毎の 0 or 1 1 2023/02/25 12:41
- 釣り 河川にてドボンのヘラブナ釣りをしていますが、針はどういったものを使えば良いかわかりません。今の時期は 1 2022/05/05 23:02
- その他(ゲーム) プレーステーション(PS5)のVCパーティーについて 1 2023/01/18 12:10
- 統計学 確率統計でExcelの使い方を教えてください。 3 2022/07/27 19:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語で%を使わない余りの出し方
-
分数の足し算をさせるプログラ...
-
nCrの計算
-
C言語
-
カードシャッフルのブログラム...
-
CppUnitはCプログラムにも使え...
-
intとlongは同じ?
-
ハフマン符号化の問題を解くプ...
-
C++で表を作成したいのです ...
-
プログラミング
-
VC++でコマンドラインから引数...
-
C言語 サイコロ 2つの値を返せない
-
2÷3などの余りについて
-
比較回数と交換回数表示について
-
信頼区間の1.96や1.65ってどこ...
-
nCmの関数
-
複数桁10進数の*桁目だけを抽出...
-
Notepad++の関数リスト表示の変...
-
C言語のfor文です。 繰り返しの...
-
break文でループを一気に抜ける...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
2の補数を計算するプログラム
-
intとlongは同じ?
-
再起呼び出しの回数をカウント...
-
C言語で%を使わない余りの出し方
-
迷路を脱出する経路探索プログ...
-
画像の拡大・縮小
-
分数の足し算をさせるプログラ...
-
C言語で簡単なパックマンゲーム...
-
C++で表を作成したいのです ...
-
条件が多い場合
-
複数の共有メモリの作成
-
ヒストグラム均等化処理プログラム
-
3のつく数と3の倍数を表示 C言語
-
argvのNULLチェック
-
乱数で交互に偶数、奇数が、、、。
-
プログラミングに関して
-
OpenCVによる4値化について
-
再帰処理をループ処理に変換
-
16bitで乱数を生成する方法
-
C++ Debug Errorについて教えて
おすすめ情報