JavaScript 随机数生成器的最佳选择

发布于 2025-01-11 04:50:09 字数 38 浏览 0 评论 0原文

math.random() 是随机/伪随机数生成器的好方法吗?

Is math.random() a good method for a random/pseudo-random number generator?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

请叫√我孤独 2025-01-18 04:50:09

问题是 - 只有软件随机数生成器不能提供真正的随机数,只能提供它们的近似值。
对于大多数情况,通过 Math.random() 的标准 JS 方式就足够了。

//standard JS approach
function random(min,max) {
 return Math.floor((Math.random())*(max-min+1))+min;
}

如果您使用 Crypto API,这可以稍微改进。 作者:Kamil Kiełczewski

//using crypto function
function rand(a, b) {
    return a+(b-a+1)*crypto.getRandomValues(new Uint32Array(1))[0]/2**32|0
}

但这些数字的目的也很重要。因为这两种方法都会在序列中产生连续的相等数字。
例如,如果您在项目的原型阶段使用随机数输出虚拟图像,您将得到一个又一个相同的图像,这是您宁愿避免的。为此,好的随机数是那些不会连续两次产生相同数字的随机数。这只能通过存储最后一个数字和递归来完成。

//random sequenz without last number repetition
let last = -1 
function rand(a, b) {
    const rnd = a+(b-a+1)*crypto.getRandomValues(new Uint32Array(1))[0]/2**32|0
  if (rand === last) {
    return rand(a, b)
  } else {
    last = rnd
    return rnd
  }
}

The thing is - only software random number generators cannot provide true random numbers, only approximations to them.
The standard JS way via Math.random() is sufficient for most cases.

//standard JS approach
function random(min,max) {
 return Math.floor((Math.random())*(max-min+1))+min;
}

This can be improved a bit if you use the Crypto API. by Kamil Kiełczewski

//using crypto function
function rand(a, b) {
    return a+(b-a+1)*crypto.getRandomValues(new Uint32Array(1))[0]/2**32|0
}

But the purpose of the numbers is also important. Because both approaches produce consecutive equal numbers in the sequence.
If you use random numbers to output dummy images in the prototype phase of a project, for example, you would have identical images one after the other, which you would rather avoid. For this purpose, good random numbers would be those without producing the same number twice in a row. This can only be done by storing the last number and recursion.

//random sequenz without last number repetition
let last = -1 
function rand(a, b) {
    const rnd = a+(b-a+1)*crypto.getRandomValues(new Uint32Array(1))[0]/2**32|0
  if (rand === last) {
    return rand(a, b)
  } else {
    last = rnd
    return rnd
  }
}
稚气少女 2025-01-18 04:50:09

getRandomInt()
random() 是一个伪随机数,因为没有计算机可以生成真正的随机数,它在所有尺度和所有大小的数据集上都表现出随机性。

getRandomInt()
random() is a pseudo-random number as no computer can generate a truly random number, that exhibits randomness over all scales and over all sizes of data sets.

万劫不复 2025-01-18 04:50:09

Math.round() 函数返回四舍五入到最接近整数的数字值。

console.log(Math.round(0.9));
// expected output: 1

console.log(Math.round(5.95), Math.round(5.5), Math.round(5.05));
// expected output: 6 6 5

console.log(Math.round(-5.05), Math.round(-5.5), Math.round(-5.95));
// expected output: -5 -5 -6

我想说随机数的最佳方法是 math.random()
祝你好运!

The Math.round() function returns the value of a number rounded to the nearest integer.

console.log(Math.round(0.9));
// expected output: 1

console.log(Math.round(5.95), Math.round(5.5), Math.round(5.05));
// expected output: 6 6 5

console.log(Math.round(-5.05), Math.round(-5.5), Math.round(-5.95));
// expected output: -5 -5 -6

I would say the best method for random numbers is math.random().
good luck!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文