Si desea un pseudoaleatorio uniformemente distribuida larga en la gama de [0, m
), intente utilizar el operador de módulo y el método de valor absoluto en combinación con el método de nextLong()
como se ve a continuación:
Math.abs(rand.nextLong()) % m;
Donde rand
es su objeto Aleatorio.
El operador de módulo divide dos números y emite el resto de esos números. Por ejemplo, 3 % 2
es 1
porque el resto de 3 y 2 es 1.
Desde nextLong()
genera una pseudoaleatorio uniformemente distribuida largo en el intervalo de [- (2^48), 2^48) (o en algún lugar en ese rango), tendrá que tomar el valor absoluto de la misma. Si no lo hace, el módulo del método nextLong()
tiene un 50% de probabilidad de devolver un valor negativo, que está fuera del rango [0, m
).
Lo que solicitó inicialmente fue una secuencia pseudoaleatoria uniformemente distribuida en el rango de [0,100). El siguiente código hace:
Math.abs(rand.nextLong()) % 100;
relacionada, puede ser útil: http://stackoverflow.com/questions/2290057/how -to-generate-a-random-biginteger-value-in-java –
¿Ha considerado obtener su larga aleatoria y tomar el mod de su rango? (Por supuesto, si el rango es solo 100 produciría un int random y lo lanzaría a long.) –
'java.util.Random' solo usa una distribución de 48 bits (ver detalles de implementación), por lo que no tendrá una distribución normal. –