
No.3ベストアンサー
- 回答日時:
○たまたまです。
○ただ、そのrand()関数はそうなる傾向が強いです。
rand()関数で使われている乱数は、正確には「疑似乱数」といって、ただの計算結果です。
「種」を使って「最初の状態」を設定する
↓
「最初の状態」を元に計算して、「乱数」と「次の状態」を求める
↓
「次の状態」を元に計算して、「次の乱数」と「その次の状態」を求める
↓
「そろ次の状態」を元に計算して、「そろ次の乱数」と「さらにその次の状態」を求める
...
とすると、「乱数」がバラバラの値に見えるような計算をしています。
計算しているだけなので、種が同じなら、同じ「乱数」が出てきます。
そこで、実行のたびに種が変わるようにするテクニックの一つが「種に現在時刻をつかう」というものです。 srand(time(NULL)) は、種にtime(NULL)で求めた「現在時刻を秒で表現した値」を使用しています。
種1と種2が違えば、乱数列1と乱数列2がまったく関係無い値になるのが理想です。
が、現実はそうもいきません。
そのrand関数の「計算」では
・種1と種2が近いと、乱数列1と乱数列2も近くなる傾向がある
・特に、下の桁ほどその傾向が強くなる。
という特徴があります。
このプログラムを連続で実行すると
現在時刻が近い
→種が近い
→乱数が近い
→%で下の桁を抜き出しているので、特に傾向が出やすい
となります。
対策としては
・種をtimeそのままではなく、工夫する
・rand() 1回で終了ではなく、複数実行する
・%1000ではなく、 (int)((rand() / ((double) RAND_MAX + 1.0)) * 10000) 等と全体を使うようにする
・rand()以外のアルゴリズムを使用する
等があります
https://ja.wikipedia.org/wiki/Rand
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンド(例えばls)の出力結果...
-
拡張子.vsdをイラストレーター...
-
アプリを実行すると、作成者を...
-
1行ずつではなくまとめてファイ...
-
Acccess レポートをグループ別...
-
(VBA)書式が変更されてしまい...
-
【ExcelVBA】UTF-8(BOM無)でC...
-
二次元配列をクリップボードに...
-
ファイル形式またはファイル拡...
-
VC++でUTF-8のファイルを出力し...
-
ファイルの文字コードをUTF-8に...
-
フォルダにあるPDF情報の抽出(VBA)
-
MATLABのCSV形式での書き込みに...
-
FORTRANの出力データの左寄せが...
-
VBSでEXCEL⇒CSV変換で日付の書...
-
PDFのプロパティの情報を抽出し...
-
csvファイルでの出力について
-
標準出力とファイルに効率的に...
-
外国語とCSVについて
-
Excel のページを Jpegファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Acccess レポートをグループ別...
-
コマンド(例えばls)の出力結果...
-
【ExcelVBA】UTF-8(BOM無)でC...
-
VC++でUTF-8のファイルを出力し...
-
ファイル形式またはファイル拡...
-
ファイルの文字コードをUTF-8に...
-
ファイル出力の場所を指定
-
ファイルI/O完了待ち
-
大量のHTMLデータのテキスト、...
-
シェルコマンドの 2>&1 とはど...
-
Wordマクロで指定したフォルダ...
-
gccによって、BOM付きのUTF-8で...
-
外国語とCSVについて
-
AccessVBA複数レポート条件毎に...
-
pcap形式データをテキストへ抽出
-
テキストファイルに改行コード...
-
重複チェックプログラム
-
BitBltについて。
-
動画ファイルのサイズ変更
-
C++ fprintf_sの使い方がわからん
おすすめ情報