相关疑难解决方法(0)

0.0到1.0之间有多少个双数?

这是我多年来一直想到的事情,但我从来没有花时间问过.

许多(伪)随机数生成器生成0.0到1.0之间的随机数.在数学上,此范围内有无限数,但是double是浮点数,因此具有有限的精度.

所以问题是:

  1. double在0.0和1.0之间有多少个数字?
  2. 是否有1到2之间的数字?100到101之间?在10 ^ 100和10 ^ 100 + 1之间?

注意:如果它有所不同,我double特别感兴趣的是Java的定义.

random floating-point precision double

92
推荐指数
3
解决办法
8726
查看次数

Math.random 产生多少熵?

我想生成一个非常大的随机数。我不需要这个数字是加密安全的。因此,我没有使用crypto.getRandomValues. 目前,我生成的随机数如下:

const random = length =>
    Math.floor(length * Math.random());

const padding = (length, character, string) =>
    (new Array(length + 1).join(character) + string).slice(string.length);

const randomBits = bits =>
    padding(bits, '0', random(Math.pow(2, bits)).toString(2));

const getRandom = bits =>
    bits <= 32 ? randomBits(bits) : randomBits(32) + getRandom(bits - 32);

console.log('         1         2         3         4         5         6');
console.log(getRandom(64));
Run Code Online (Sandbox Code Playgroud)

然而,这似乎有点浪费,因为 JavaScript 中的数字是64 位长的

IEEE 754 双精度二进制浮点格式:binary64

在我看来,我们至少应该能够恢复尾数的所有 52 位。我们可以从Math.randomJavaScript生成的数字中提取多少位熵,以及如何提取?

javascript random precision

5
推荐指数
1
解决办法
1172
查看次数

标签 统计

precision ×2

random ×2

double ×1

floating-point ×1

javascript ×1