Math.random()*10.0-5.0; - liczby z jakiego zakresu

0

Witam czy mógłby ktoś wyjaśnić mi o co chodzi tzn wiem ze tutaj są losowane liczby ale z jakiego zakresu ??

0
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

0

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.

0

@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

0

dzięki.

potrzebuje na egzamin.

coś takiego było w latach poprzednich.

0

to ja tez sie spytam. jak stworzyć losowanie z rozkładem wykładniczym?

0

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());

1 użytkowników online, w tym zalogowanych: 0, gości: 1