2012-10-09 259 views
7

随机http://www.scala-lang.org/api/current/scala/util/Random.html)的Scaladoc页指定nextDouble“返回下一个伪,从该随机数生成器的序列均匀分布的0.0和1.0之间的双值”。Scala中的Random.nextDouble的范围是什么?

很明显,它留下了“包容”。例如,值0.0和1.0是否可能?如果是这样,哪一个(或两个)?例如,如果我除以这个数字,我真的想确保0不是一个返回值。在其他情况下,我可能不需要1.0。很明显,这很难通过测试得到,因为在0.0和1.0之间的值大约在0.038以上。

这是什么?请注意,因为不是每个人都能记得哪个“(”和“[”意思是“包含”,请只说“包含X”。

+1

附注:1.0是唯一的,但是由于浮点数的内部表示,当你对它进行一些算术运算时,可能会发生1.0附近的值表示为1.0 ...(这里有一个Java拼图,但是我现在找不到)。 – sschaef

回答

13

这是因为scala.util.Random是一个很薄的包装java.util.Randomsee the source),其记载in sufficient detail

nextDouble的常规协定是一个双精度值,选择(约)均匀地从范围0.0D(包容)至1.0D(独家),是伪随机生成并返回。

+2

nextDouble()是一个令人难以置信的重要功能:这需要在EXCRUCIATING细节中以“scaladocs”本身的语言记录。依赖于它是一个Java函数的包装,q.v.是一个非常糟糕的主意,肯定会有一天它不会基于Java函数。无论如何,谢谢你的回答! –