Witam czy mógłby ktoś wyjaśnić mi o co chodzi tzn wiem ze tutaj są losowane liczby ale z jakiego zakresu ??
frizz napisał(a)
Witam czy mógłby ktoś wyjaśnić mi o co chodzi tzn wiem ze tutaj są losowane liczby ale z jakiego zakresu ??
Math.random() <0;1)
Math.random()*10 <0;10)
Math.random()*10 - 5 <-5;5)
double z tego zakresu
a jak zrobić tak żeby wynikiem tego losowania był przedział obustronnie domknięty? a zwłaszcza z prawej strony. czy jest jakaś inna metoda oprócz modulo.
@luo, pytasz aby "poszerzyć horyzonty" czy rzeczywiście potrzebujesz losować liczby z przedziału (a,b] lub [a,b] ?
y=Math.random()*(b-a); // jest w [0,b-a)
y=Math.random()*(b-a)+a: //jest w [a,b)
y=b-Math.random()*(b-a); //jest w (a,b]
Zgodnie z dokumentacją metoda Random.nextLong() returns the next pseudorandom, uniformly distributed long value from this random number generator's sequence.
Zatem rozwiązanie dla [a,b] jest chyba takie:
Random r=new Random();
double y;
long l;
.....
l=r.nextLong();
if(l<=0)
{
y=-(double)l/double(Long.MIN_VALUE);
}
else
{
y=(double)l/double(Long.MAX_VALUE);
}
// jeśli zignorujemy nieuniknione zaokrąglenia, to y są równomiernie rozłożone w przedziale [-1,1]
y=((b-a)*y)/2+(b+a)/2;
pozdrawiam
dzięki.
potrzebuje na egzamin.
coś takiego było w latach poprzednich.
to ja tez sie spytam. jak stworzyć losowanie z rozkładem wykładniczym?
Jeżeli chodzi Ci o to żeby szansa trafienia w przedział [a,b] była proporcjonalna do całki od a do b z funkcji e-x, to
double y=-Math.log(Math.random());