言語は問いませんが、コード例としてJavaScriptのものを記載します。
ランダムに0~9の範囲の整数を求めるには、
擬似乱数生成関数の結果(0以上1未満) * (最大値 + 1) ※小数点以下切り捨て
で求めます。
一般的にはこのようなコードになると思います。
lang
1var max = 9; // 最大値 2var rn = Math.random() * (max + 1); // ランダム値(浮動小数点数) 3var result = Math.floor(rn); // 整数(切り捨て)
このランダム値に重みをつけたいです。
試しに、以下のように指数分布を使って求めました。
lang
1var lambda = 0.8; // 平均(必ず小数点以下をつける) 2var rn = -Math.log(Math.random()) / lambda; 3var result = Math.floor(rn);
この場合、指定できるパラメーターは平均で、範囲を決めることができません。
まれに大きな値が返されることがあります。
この結果を、0以上1未満で返すか、または範囲内の整数で返すようにするにはどうしたら良いでしょうか。
そもそも指数分布を使うのが間違いでしょうか?
単純に二次関数などを使って重み付けを行うべきでしょうか?
(二次関数で上手く行くことは確認済みです。)
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/26 11:33
2016/08/26 12:52
2016/08/26 13:06
2016/08/26 13:32 編集
2016/08/26 13:32