• ベストアンサー

発生乱数の偏りを無くしたい

エクセルで=RAND()を用いてA1~A100のセルに100個乱数を発生させたときに(乱数は0~1の幅)、0~1の値を偏り無く発生させることは可能でしょうか?? 発生した100個の乱数をコピーして形式を“値”にして貼り付けてその100個の乱数の平均や中央値をみてみると0.5にはならないことから疑問に思いました・・・。 ご存知の方アドバイスよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Bubuca
  • ベストアンサー率59% (531/896)
回答No.2

こんにちは 面白い疑問だなと思ったので試してみました。 A1に=Rand()を入れてA1000までコピーしました。 B1に=Average($A$1,A1)と入れてB1000までコピーしました。 これで平均値の途中経過もわかるようになります。 A1からB1000までを選んで折れ線グラフを作成し、何度か再計算をすると 乱数の振れ巾や平均値の移動の様子がわかります。 1000個の数字でも平均値で0.45~0.55くらいの振れは出るんですね。 これは0.1未満の数値も出てしまうからだと思いましたので、 乱数の範囲を0.1~0.9に絞ると平均値のぶれはとても小さくなりました。 このときの式は=Rand()*(0.9-0.1)+0.1としてやればいいです。 0.01~1.00が欲しければ=Rand()*(1-0.01)+0.01とすればいいです。

y_kenken
質問者

お礼

Bubucaさま 早速のアドバイスありがとうございます。 アドバイスに従い=Rand()*(1-0.01)+0.01を採用しファイルを作成しました。おかげでアドバイス通り偏りはだいぶ少なくなりました!! 今後もアドバイスよろしくお願いします。

その他の回答 (1)

  • driverII
  • ベストアンサー率27% (248/913)
回答No.1

今、ためしに 1000 個でやったら平均 0.501907 でした。 乱数ですからあるていど偏りはあるでしょう。 もし何かで偏りない値がほしければ、 0~1をいくつかでわけ(0~0.2,0.2~0.4,…など) 各域に応じて乱数を発生させるしかないでしょう。

y_kenken
質問者

お礼

driverIIさま 早速のアドバイスありがとうございます。 やはり乱数ですからある程度の偏りはしかたないのですね・・・。 でも、ご指摘の通り“n”を増やせば偏りは小さくなりますね。 シートは大きくなってしまいますが参考にさせていただきます。ありがとうございます。

関連するQ&A

  • 発生させた乱数を用いての作業

    こんにちは 今回乱数発生で300個の乱数を作りました その乱数の二乗を新しいシートに出したいのですが、 単純にひとつの値をコピーして、それを二乗してオートフィル とやっても同じ値しか出てきません コピーする段階で、Sheet1のA1 のコピーという感じでできればいいのですが 単純に乱数の値しかコピーしてくれません。 どうすればできるのでしょうか? どうか教えてください

  • 乱数を発生させるプログラムを教えてください。

    タイトルのままなのですが、1から100までの乱数を発生させるプログラムを知りたいです。 乱数をxとおくと、xの値は、0<x<1の範囲内でお願いします。 C言語で、rand関数を用いて、どうかお願いします。

  • エクセルの乱数発生についてお尋ねします。

    rand()のような関数のファミリーを使うと乱数が発生できます。 そこで、ある程度広がりを持ったシート内に乱数を発生させました。 それは満足していますが、マウスで処理をしたり、何かをアクティブにしたり非アクティブにしたりする操作をすると、乱数が毎回発生してしまいます。シートの数字がパッと変わるのです。 乱数を発生させるタイミングがコントロールできていないわけですが、どのように考えたらいいでしょうか。1回乱数を発生させたら固定したままで、”では、ここで乱数を発生させる”というコマンドの出し方なのですが。エクセルではどうしたらいいでしょうか。

  • 乱数の最大値

    C言語で0~Nまでの乱数を発生させる場合、 srand((unsigned) time(NULL)); rand()%N; とやりますよね。 このやり方だと、発生する乱数はRAND_MAX以下しかできません。 RAND_MAX以上の値を発生させるにはどうすればいいのでしょうか?

  • エクセルで0超1未満の乱数を発生する方法

    タイトルの通りです。 EXCELのRAND関数は0以上1未満の乱数を発生しますが、0超1未満の乱数を作る方法を教えて下さい。 確率の検証用に乱数を作りたいのですが、0や1(0%や100%)は除きたいのです。もちろん非常に小さい数でも0でなければ採用したいのですが0だけはダメです。 実用上、RANDでも0は殆ど出ないとは思いますが…あるいは乱数を発生させておいて0になった時だけ再計算させれば良いのかもしれませんが、出来れば再計算無しで最初からそうしたいのです。

  • 乱数関数について

    「エクセルの乱数関数を用いて、0~1の乱数を100個発生させなさい」という問題があるんですが、どうしてもわかりません。RANDをつかうらしいですが。ぜひとも教えてください。

  • 乱数について

    こんばんは。 何度も申し訳ありませんが、今回は乱数について教えてください。 LinuxでCを勉強しているんですが、 randで乱数を発生させることはできたんですが、 そのプログラムを何度実行させても 出てきた乱数は同じ値なんです。 プログラム内で例えば10こ乱数を発生させたとすると 違うものが出ます。 しかし、もう一度そのプログラムをはしらせると 前回と全く同じ並びで同じ数が出るのはどうしてでしょうか? 言ってる意味わかっていただけましたでしょうか? 宜しくお願いします。

  • EXCELで乱数 -RAND関数について

    Excelの乱数 Rand()について教えて下さい。 入力セルの数値変更をする度に各Rnad()のセルの 値が更新されますがこれを固定する方法を教えて下さい。 また「更新」と「更新の禁止」を切り替えるにはどうすればいいか 御願いします。

  • 乱数の出し方で・・・

    たとえば、39人を乱数を使って並べ替えたいのですが、B列以降に名前や必要な項目を書き、A列に=RAND()を入れそれを使って並び替えるのではなく、1から39までの乱数を重複なしに発生させることはできないのですか???

  • 0 からa-1 までの整数の乱数をn 個発生させ、発生した整数のヒスト

    0 からa-1 までの整数の乱数をn 個発生させ、発生した整数のヒストグラムをプリントアウトしたいです.また,a とnはコマンドラインから引き渡します 0 からa-1 までの整数を発生する乱数の書き方は (int)((double)rand()/((double)RAND_MAX+1) *a); プログラムをRandHist としたとき RnadHist 10 1000 と入力すれば 0 982 1 1035 2 956 3 1102 ・ ・ 9 971 などと。出力されるようなプログラムを作る問題ですが,a とn は、任意に変えられるように したいです. どなたか教えてください.

専門家に質問してみよう