2012-10-09 16 views
7

La página Scaladoc para Random (http://www.scala-lang.org/api/current/scala/util/Random.html) especifica que nextDouble "Devuelve el siguiente pseudoaleatorio, distribuidos uniformemente doble valor entre 0.0 y 1.0 de la secuencia de este generador de números aleatorios."¿Cuál es el rango de Random.nextDouble en Scala?

Bastante flagrante, deja fuera "inclusión". Por ejemplo, ¿son posibles el valor 0.0 y 1.0? Si es así, ¿cuál (o ambos)? Por ejemplo, si estoy dividiendo por este número, realmente me gustaría asegurarme de que 0 no sea un valor devuelto. En otros casos, es posible que no desee 1.0. Obviamente, esto es difícil de obtener a través de pruebas, ya que hay alrededor de 10^15 valores entre 0.0 y 1.0.

¿Qué es? Tenga en cuenta que dado que no todos pueden recordar cuál de "(" y "[" significa "incluido", por favor simplemente diga "incluye X".

+1

nota al margen: 1.0 es exclusivo, pero debido a la representación interna de los números de coma flotante puede ocurrir que un valor cercano a 1.0 se represente como 1.0 cuando se hace aritmética con él ... (hay un enigma de Java pero No puedo encontrarlo ahora). – sschaef

Respuesta

13

Esto se debe a que scala.util.Random es un envoltorio muy fino alrededor de java.util.Random (see the source), que se documenta in sufficient detail:

el contrato general de nextDouble es que un valor doble, elegido (aproximadamente) de manera uniforme desde la 0.0d rango (inclusive) a 1.0d (exclusiva), es pseudoaleatoriamente generado y devuelto.

+2

nextDouble() es una función increíblemente importante: esto debe documentarse en el idioma "scaladocs" en sí en EXCRUCIATING detail. Confiando en el hecho de que es un envoltorio alrededor de una función de Java, q.v. es una muy mala idea, porque seguramente algún día habrá un caso en el que NO se basará en una función Java. En cualquier caso, gracias por la respuesta! –

Cuestiones relacionadas