10
votes

Peut-il scala.util.random.nextinT (): Int renvoie occasionnellement une valeur négative?

documentation pour scala.util.random.nextint (n: int): INT dit "Retourne un pseudorandom, une valeur INT uniformément distribuée entre 0 (inclus) et la valeur spécifiée (exclusive) .. . "Tandis que pour scala.util.random.nextint (): Int Il est écrit" renvoie le prochain pseudorandom, uniformément distribué une valeur int ... ", sans rien dire sur le zéro. Puis-je avoir une valeur négative ici occasionnellement?


1 commentaires

Où dit-il ça? Les documents que j'ai trouvés ont déclaré "toutes les 2 valeurs INT possibles des 2 ^ 32 sont produites avec (environ) une probabilité égale", ce qui signifie que les nombres négatifs sont plus probables que positifs (car il y a un nombre plus négatif) .


4 Réponses :


12
votes

Oui, vous pouvez (et ça va en raison de Définition de distribution uniforme ). De plus, vous l'obtiendrez dans près de 50% des cas.

(for(i <- 1 to 100000) yield scala.util.Random.nextInt()).filter(_<0).length


3 commentaires

En moyenne, en fait, exactement 50% des cas


@Luigi N'oubliez pas les cas neutres, lorsque la valeur aléatoire est égale à 0. Il y a donc 49,9 ...% des percents de positifs, le même nombre de négatifs et quelques zéros.


Je n'ai pas oublié ... Eh bien, je suppose qu'une valeur est également probable. Peut-être que vous ne pouvez pas obtenir int.minvalue ou quelque chose. Il y a 2147483648 négatif, 2147483647 positif et 1 zéro int



10
votes

Apparemment, oui. Il a renvoyé une valeur négative lors de mon premier essai! : -)

scala> import util.Random
import util.Random

scala> Random.nextInt
res0: Int = -299006430


4 commentaires

Quelles sont les chances de ça ?! :)


@Fabienwarniez, quelles sont les chances de votre commentaire sur mon ancien poste hier, et moi courir dans une situation similaire à peu près au même moment? :) Twitter.com/Missingfaktor/status/914642815854006272


Je suis un peu effrayé tbh!


Cette réponse de 2011 a été le deuxième résultat de la recherche lorsque j'ai cherché scala aléatoire int sans zéro . Peut-être que c'est un signe.



2
votes

scala.uti.random.Nextint (): intère intenter la même méthode de Java.Util.Random. Et la gamme que Luigi a souligné que [INTEGER.MIN_VAL, INTEGER.MAX_VAL]. En fait, une valeur intégrée uniformément distribuée "signifie que tout nombre de type INT est possible d'être renvoyé et que le risque de chacun en théorie est identique.


0 commentaires

9
votes

Comme vous pouvez le voir ici ( Utilisation de l'excellent de Mike Harrah's excellent SCALA ''S> Randoma's's Random juste des délégués à un java.util.random sous-jacent , qui est appelé auto .

Comme d'autres signalés, la plage par défaut est comprise entre INTEGER.MIN_VAL et integer.max_val , en d'autres termes, tout integer possible, y compris les négatifs.

Si vous voulez juste la plage positive, vous pouvez utiliser la méthode surchargée Nextint qui prend un argument, comme celui-ci: xxx

selon les documents:

retourne un pseudorandom, une valeur INT uniformément distribuée entre 0 (inclus) et la valeur spécifiée (exclusive), dessinée de cette Séquence du générateur de nombres aléatoires.


1 commentaires

Si vous souhaitez la plage positive, vous préférez faire: aléatoire.nexint (integer.max_value + 1) , car 0 n'est pas considéré comme positif et entier.max_value va être exclu à l'extrémité supérieure .