Liczba losowa - double

Odpowiedz Nowy wątek
2012-10-19 20:39
0

Jak wylosowac losowa liczbe typu double z danego przedzialu, przykladowo z [6.0;12.888] ?

Pozostało 580 znaków

2012-10-19 20:43
0

Wystarczy chwilę poszukać albo pomyśleć:

double fRand(double fMin, double fMax)
{
    double f = (double)rand() / RAND_MAX;
    return fMin + f * (fMax - fMin);
}

// stackoverflow.com

Co kurła debuguj ten kod i streszczaj się klientowi chce się fixa, a jak nie kurła to odpale visuala i ci pomoge a tego byś nie chciał
Szybszy :< - agilob 2012-10-19 20:47

Pozostało 580 znaków

2012-10-19 20:46
0
[email protected]:~> cat rand.cpp
#include <cstdlib>
#include <iostream>

int main(){

int min = 10,      //zakres
    max = 20; //losowania
double randy = min + (double) rand() / ((double) RAND_MAX / (max-min));

std::cout << randy << std::endl;

return 0;
}

Kiedyś miałem sen... że wszyscy ludzie zaczną używać tagów <code> i czytać błędy kompilatora...
edytowany 1x, ostatnio: agilob, 2012-10-19 20:47

Pozostało 580 znaków

2012-10-20 01:01
3

C++11:

#include <iostream>
#include <random>
#include <functional>
#include <algorithm>
#include <iterator>

#include <ctime>

int main() {

  // Limity
  double min = 6.0;
  double max = 12.888;

  // Generator liczb.
  std::mt19937 engine(std::time(nullptr));

  // Żądany rozkład.
  std::uniform_real_distribution<> dist(min, max);

  // Żeby było prościej.
  auto gen = std::bind(dist, engine);

  // 10 liczb.
  std::generate_n(std::ostream_iterator<double>(std::cout, " "), 10, gen);

  return 0;
}

http://ideone.com/cjKwd2


"(...) otherwise, the behavior is undefined".
edytowany 1x, ostatnio: Endrju, 2012-10-20 01:02

Pozostało 580 znaków

2012-10-20 02:25
Rev
3

Można również skorzystać z std::random_device. W zależności od implementacji biblioteki standardowej oraz systemu poda nam możliwie niedeterministyczne liczby (na Windows będzie to wywołanie RtlGenRandom(), które swoją entropię bierze z wielu źródeł: http://en.wikipedia.org/wiki/CryptGenRandom#Method_of_operation).

std::random_device random_device;

Jako generator liczb:

auto generator = std::bind(dist, std::ref(random_device));

Jako ziarno dla Mersenne Twister (gdy potrzebujemy dużo liczb w możliwie krótkim czasie):

auto generator = std::bind(dist, std::mt19937(random_device()));

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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