- 締切済み
乱数の発生方法
こんにちは! いつも大変参考にさせていただいております。 どうか教えていただきたい事があります。 数学は大の苦手で、学生時代からほとんど勉強してこなかっただけに、 数学の本を読んでも、今回の問題とどのように関係しているのかがわからず、お手上げ状態です。 実行したいのは、確率により乱数を発生させたいです。 たとえば、0から2の乱数を発生させるにあたり、 0の発生は50%、 1の発生は25%、 2の発生は25%、 というように、発生する確率を設定したいと思っています。 確率の本を読んでみたのですが、入門書には確率の求め方は載っていたのですが、それをどのように利用したらいいのかわかりません。 このような乱数の発生のさせかたは可能でしょうか? また、どのようにしたらいいのでしょうか? 教えてください。。。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- ese_ee
- ベストアンサー率48% (68/139)
>0の発生は50%、 >1の発生は25%、 >2の発生は25%、 この例ならば、 0~3までの乱数を発生させ、 3のときは0にする。 で実装できますね。 あらかじめ乱数表を用意し、 そこから任意の回数ひくというやり方としては、 ・任意の重み付けによる 「福引きの1等、2等...」もしくは「おみくじ」方式 や ・重み付けは均等で、乱数がダブらないようにする →「シャッフルしたトランプ」方式 があります。 いろいろ工夫すると楽しいと思います。 ご健闘を。
- Gab_km
- ベストアンサー率40% (20/50)
例えば、システム時刻(ミリ秒だけで十分)を取ってきて、4を法とする剰余を求めます。 そして、剰余が0または3の時に「0」を返し、1の時は「1」、2の時は「2」を返す、 というような関数を定義してみましょう。 これもある種の疑似乱数のように振る舞ってくれるのではないでしょうか。
- sakusaker7
- ベストアンサー率62% (800/1280)
話の前提として、なんらかの乱数を発生させるライブラリ関数なんかは使っていいんですか? 大抵は一様乱数を発生させるライブラリ関数があるでしょうから、 まず乱数を発生させてからその値に応じて 0/1/2 に振り分けるフィルター関数を 作ってやればよいのではないでしょうか? 擬似乱数もとめるところから自前ででやれということだとちと面倒ですが、 それにしたって調べればいくらでも方法やサンプルが転がってます。 >確率の本を読んでみたのですが、入門書には確率の求め方は載っていたのですが 確率の求め方?
お礼
早速のご回答ありがとうございます ライブラリ関数は使用できます RAND()関数で乱数を発生させることができると思っています。 そうか、ssakusaker7さまのおっしゃるように、 乱数を発生させた後に、フィルタ関数をかける方法がありますね!! 擬似乱数というのはどんなものかわかりませんが、 そのフィルタ関数ならなんとかできそうです。 考えてみます!