【发布时间】:2019-02-04 22:58:48
【问题描述】:
就像this question 的提问者一样,我想知道为什么Math.ceil(Math.random() * 10) 不优于Math.floor(Math.random() * 10) + 1,并发现这是因为Math.random 有一个很小(但相关)的机会准确地返回0。但是有多小呢?
进一步的研究告诉我 this random number is accurate to 16 decimal places... well, sort of. 这是我很好奇的“某种”。
我了解浮点数的工作方式与小数不同。不过,我在细节上挣扎。如果这个数字是一个严格的十进制值,我相信机会是十分之一(或十亿,在美国系统中) - 1:1016。
这是正确的,还是我搞砸了,或者浮点数有什么不同?
【问题讨论】:
-
为什么从
Math.random返回零对你很重要? -
@TimBiegeleisen 正如我在问题中提到的,它对使用它生成随机整数有影响。我可以采用常见的做事方式(使用 .floor...+1 而不是 .ceil),但我想知道它是否实际上有必要防止不准确(或代码可能破坏台球迭代中的每一个)。此外,它可能会对这种方法的实际随机性产生影响。
-
一个可能的 hackish 修复:检查是否完全等于零,如果为真,则添加 JavaScript 中可能的最小数字。我认为,这几乎对分布的影响可以忽略不计,但可以避免零问题。
-
@TimBiegeleisen 我的意思是,是的,但是添加
if (result == 0){result =+ Number.MIN_VALUE}似乎比添加.floor...+1更笨拙。不过值得注意的是。 -
有效数字
标签: javascript random floating-point