1. ホーム
  2. javascript

[解決済み] JavaScriptのMath.randomはどのくらいランダムなのか?

2022-08-22 01:40:36

質問

6年前から 乱数発生器 のページを持っています。長い間、このページは Google で「乱数発生器」の検索結果の 1 位または 2 位を占めており、ディスカッション フォーラムやブログで何十、何百ものコンテストや抽選を決めるために使用されてきました (Web ログで参照元を確認し、通常は見に行くため、私は知っています)。

今日、ある人が私に電子メールを送ってきました。 それは私が考えているほどランダムではないかもしれません。 彼女は非常に大きな乱数 (たとえば 1 から 1000000000000000 の間) を生成してみましたが、ほとんど常に同じ桁数であることがわかりました。実際、私は関数をループでラップして、何千もの数字を生成できるようにしましたが、案の定、非常に大きな数字に対して は 2 桁程度しか変わりませんでした。

どうしてですか?

以下はループバージョンですので、実際に試してみてください。

http://andrew.hedges.name/experiments/random/randomness.html

これは Mozilla Developer Network から取得した素直な実装と、今はもう存在しない Web ページ (Paul Houle の "Central Randomizer 1.3") から盗んできた 1997 年のコードの両方が含まれています。各方法がどのように動作するかは、ソースを参照してください。

私が読んだのは はこちら 他の場所 について メルセンヌ・ツイスター 私が興味を持ったのは、なぜJavaScriptの組み込みの Math.random 関数から得られる結果に大きなばらつきがない理由です。ありがとうございます。

どのように解決するのですか?

1から100までの数字が与えられる。

  • 9は1桁(1-9)である
  • 90は2桁(10-99)
  • 1 は 3 桁 (100)

1から1000までの数字が与えられている。

  • 9は1桁の数字
  • 90は2桁
  • 900は3桁
  • 1は4桁

といった具合になります。

つまり、ランダムにいくつかを選択すれば、その選択された数字の大部分は同じ桁数になります。