js

如何测试js随机数的均匀性

小樊
81
2024-10-09 21:43:22
栏目: 编程语言

要测试 JavaScript 随机数生成器的均匀性,您可以使用以下方法:

  1. 生成大量随机数并统计每个值出现的次数。
  2. 检查各个值出现的频率是否接近相等。

以下是一个简单的示例,用于测试 JavaScript 的 Math.random() 随机数生成器的均匀性:

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; // 设置一个容差值

  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 次迭代测试随机性
testRandomness(10000);

这个函数会生成 10 个范围内的随机整数(0 到 9),并统计每个整数出现的次数。然后,它会检查每个整数的出现次数是否在预期范围内。您可以根据需要调整 iterationstolerance 参数。

请注意,Math.random() 生成的是伪随机数,因此在某些情况下可能无法完美地均匀分布。对于需要高质量随机数的应用,建议使用 Web Crypto API 或其他加密安全的随机数生成器。

0
看了该问题的人还看了