我想在Node.js中生成具有最大范围的统一随机数。这样做的最佳方法是什么?
("最大可能"我的意思是2 ^ 64种可能性,而不是无限多种可能性。)
答案 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());