生成Node.js中范围最大的随机数?

时间:2016-03-30 01:26:02

标签: node.js random

我想在Node.js中生成具有最大范围的统一随机数。这样做的最佳方法是什么?

("最大可能"我的意思是2 ^ 64种可能性,而不是无限多种可能性。)

2 个答案:

答案 0 :(得分:1)

您可以使用ES6中引入的Number对象的MAX_SAFE_INTEGER属性(对于旧版本的Node here,还有一个polyfill)和给出了最大的整数,它不会与任何其他整数碰撞,因为基础数值表示系统会失去准确性。如果由于某种原因,您不关心碰撞,则可以在同一对象上使用更大的MAX_VALUE属性。这就是我要做的事情:



// function declaration using ES6 arrow/lambda syntax
var getMaxRandomInt = () => Math.floor(Number.MAX_SAFE_INTEGER * Math.random());
// equivalent to the following:
// function getMaxRandomInt() { return Math.floor(Number.MAX_SAFE_INTEGER * Math.random()); }

// example
document.write(getMaxRandomInt());




请注意,尽管分布是均匀的,但大多数结果将包含与上限相同的位数(或科学形式的相同指数),因为有更多的大值而不是小值。如果你想返回一个浮点数,那么你可以删除Math.floor函数(但从功能上来说,它与大值有很大不同,特别是因为所有数字最终都存储为JavaScript中的浮点数)

答案 1 :(得分:0)

对@ user162097的答案进行轻微修改

var getRandomIntWithLargestRange = () => Math.floor(
  Number.MAX_SAFE_INTEGER * (2 * (Math.random() - 0.5))
);

// example
document.write(getRandomIntWithLargestRange());