2012-10-09 164 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函數。無論如何,謝謝你的回答! –