JavaScriptのシミュレートされたランダム性を理解する:Math.random()
に深く潜るプログラミングにおける一見楽な乱数の生成は、特にコンピューターの本質的に決定論的な性質を考慮して、根本的な複雑さを覆い隠すことがよくあります。この記事では、javaScriptが math.random()
を使用してランダム性をシミュレートし、乱数として知覚するものを生成するメカニックを発表する方法について説明します。
math.random()によって提供される「ランダム性」は本当にランダムではありません。それは擬似ランダムです。 擬似ランダム数ジェネレーター(PRNG)は数学的アルゴリズムを使用して、ランダムな動作を示す数字のシーケンスを作成します。
。
math.random()は通常、XorshiftやMersenne Twisterなどのアルゴリズムを使用します(正確なアルゴリズムは、ChromeのV8などのJavaScriptエンジンに依存します)。
decoding
はJavaScriptの主要な乱数ジェネレーターです。 次のように機能します:
0(包括的)と1(排他)の間の浮動小数点数を生成します。
// 0から1の間の乱数
console.log(math.random());
// 0〜9の間のランダム整数
console.log(math.floor(math.random() * 10));
// 1〜100の乱数
console.log(math.floor(math.random() * 100)1);
// Random number between 0 and 1
console.log(Math.random());
// Random integer between 0 and 9
console.log(Math.floor(Math.random() * 10));
// Random number between 1 and 100
console.log(Math.floor(Math.random() * 100) 1);
プロセスにはこれらの手順が含まれます:
初期シード値が使用されます。 この種子は、多くの場合、システムクロックまたは別のユニークなソースから派生しています。
この予測可能なシーケンス(種子を与えられた)により、シミュレーションやゲームに適していますが、暗号化アプリケーションには適していません。
math.random()
//暗号化的にランダム値を保護します
const array = new Uint32Array(5);
window.crypto.getRandomValues(配列);
console.log(array);
// Cryptographically secure random values
const array = new Uint32Array(5);
window.crypto.getRandomValues(array);
console.log(array);
システムは、種子値に予測不可能な外部データ(マウスの動き、キーストローク、システムクロック)を使用することがよくあります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3