確率を作成するための最良の方法または最も受け入れられる方法が何であるかを知りたいと思います。私はシンプルを探していますMath.random()の確率変更子
How random is JavaScript's Math.random?
と
Generating random whole numbers in JavaScript in a specific range?
:私はいくつかの研究を行って、そのようにMath.random()トピックに関するいくつかの興味深い質問と答えを見つけましたを変更すると、Math.random()を使用して値が真となる確率を変更します。
たとえば、私はを知っていますは、時間の1 50%近くを生成するための有用な方法である。
-Math.random()生成された数である-if(含む)0と1(排他的)
間の乱数を生成します< 0.5の場合、2を掛けた数値は1より小さくなりますので、この数値.floor()は0を返します。
- 生成された数値が> 0.5の場合、2を掛けた数値は1より大きいこの数値.floor()は1を返します。
「修飾子」を使用して1を得る確率を歪ませたいと思います。これはcloですあなたが望む確率を得るために来なければなりません。
コードスニペットを実行するたびに、コンソールはヒット率を表示します。あなたが見ることができるように、それらはほとんど正確ですが、それほど正確ではありません。試行錯誤で指数修正機能を思いついた。これをもっと正確にする方法はありますか?
var youHit = Math.floor(Math.random() * 2);
var totalTries = 0;
var hits = 0;
var pointNine = 0.9; // you want 90% of tries to hit
var pointEight = 0.8;// you want 80% of tries to hit
var pointSeven = 0.7;// you want 70% of tries to hit
function probCheck(modifier) {
var exponent = 1 + (1 - modifier) + (1 - modifier)*10;
for (var x = 0; x < 100; x++) {
youHit = Math.floor((Math.pow(modifier, exponent)) + (Math.random() * 2));
totalTries += 1;
if (youHit) {
hits += 1;
}
}
console.log("final probability check: " + hits/totalTries);
};
probCheck(pointNine);
probCheck(pointEight);
probCheck(pointSeven);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
「正確」が高いほど、ランダム性が低くなります。 – JDB
グローバル変数 'hits'と' totalTries'をリセットしていないので、おそらくグローバルではありません。 – James