如何測(cè)試js隨機(jī)數(shù)的均勻性

js
小樊
82
2024-10-09 21:43:22

要測(cè)試 JavaScript 隨機(jī)數(shù)生成器的均勻性,您可以使用以下方法:

  1. 生成大量隨機(jī)數(shù)并統(tǒng)計(jì)每個(gè)值出現(xiàn)的次數(shù)。
  2. 檢查各個(gè)值出現(xiàn)的頻率是否接近相等。

以下是一個(gè)簡(jiǎn)單的示例,用于測(cè)試 JavaScript 的 Math.random() 隨機(jī)數(shù)生成器的均勻性:

function testRandomness(iterations) {
  const counts = new Array(10).fill(0);

  for (let i = 0; i < iterations; i++) {
    const randomValue = Math.floor(Math.random() * 10);
    counts[randomValue]++;
  }

  const expectedCount = iterations / 10;
  const tolerance = iterations / 1000; // 設(shè)置一個(gè)容差值

  for (let i = 0; i < counts.length; i++) {
    const count = counts[i];
    const deviation = Math.abs(count - expectedCount);

    if (deviation > tolerance) {
      console.log(`Value ${i} appears ${count} times, which is ${deviation.toFixed(
        2
      )} times more frequently than expected.`);
    } else {
      console.log(`Value ${i} appears ${count} times, which is within ${tolerance.toFixed(
        2
      )} times the expected count.`);
    }
  }
}

// 使用 10000 次迭代測(cè)試隨機(jī)性
testRandomness(10000);

這個(gè)函數(shù)會(huì)生成 10 個(gè)范圍內(nèi)的隨機(jī)整數(shù)(0 到 9),并統(tǒng)計(jì)每個(gè)整數(shù)出現(xiàn)的次數(shù)。然后,它會(huì)檢查每個(gè)整數(shù)的出現(xiàn)次數(shù)是否在預(yù)期范圍內(nèi)。您可以根據(jù)需要調(diào)整 iterationstolerance 參數(shù)。

請(qǐng)注意,Math.random() 生成的是偽隨機(jī)數(shù),因此在某些情況下可能無(wú)法完美地均勻分布。對(duì)于需要高質(zhì)量隨機(jī)數(shù)的應(yīng)用,建議使用 Web Crypto API 或其他加密安全的隨機(jī)數(shù)生成器。

0