dokładne losowanie liczb pseudolosowych

0

potrzebuję podpowiedzi na losowanie liczb, ale bardziej dokładnego aniżeli

    srand(static_cast<int>(time(NULL)));
    return rand()%(Max - Min)+ Min; 

ponieważ wyniki takiego losowania są słabe, losując z zakresu 1, 100 po 10 losowaniach miałem liczby: 39, 45, 53, 62, 65... po prostu wynik się zwiększał po trochu, a inna sprawa, że chciałbym żeby w ciągu sekundy było w stanie wylosować więcej niż jedną liczbę na przykład podczas losowania w pętli

for(i=0; i<10000; i++)
{
srand(static_cast<int>(time(NULL)))
std::cout<<rand()%100+1;
} 

przez pierwszą sekundę cała konsola będzie zawalona jedna liczbą która dopiero po chwili się zmieni.
czekam na jakieś sugestie, dzięki.

1

srand wywołuje się TYLKO raz!

0

srand() używa się 1(słownie : jeden) raz na całe wykonanie programu.
w mainie zapisz to jako pierwszą linijkę, a potem używaj już wyłącznie rand()

0

wiem... to jest tylko przykład pisałem to na szybko podczas pisania postu żeby zobrazować sytuację.

0

Skoro to jest tylko "przykład żeby zobrazować sytuację" to czemu piszesz o problemie z losowaniem więcej niż jednej liczby w ciągu sekundy? Przecież ten problem jest właśnie spowodowany tym, że za każdym razem wywołujesz srand...
Coś się mylisz w zeznaniach ;)

0

:O, no to się faktycznie zbłaźniłem chyba faktycznie u siebie też tak testowałem. no to drugi problem zażegnany, pozostaje pierwszy.

0

Pierwszy problem jest związany z tym samym - inicjujesz generator podobnymi wartościami. Wywołuj go tylko raz, a problem zniknie, zobacz różnicę między:

int main()
{
    int j = static_cast<int>(time(NULL));
    srand(j);
    for(int i=0; i<10; i++)
    {
        std::cout<<rand()%100+1 << std::endl;
    }
return 0;
}

a:

int main()
{
    int j = static_cast<int>(time(NULL));
    for(int i=0; i<10; i++)
    {
        srand(j + i);
        std::cout<<rand()%100+1 << std::endl;
    }
return 0;
}
0

niee, tu nie chodzi o to mój kod wygląda tak:

#include <iostream>
#include <ctime>
#include <cstdlib>
int main()
{
    int j = static_cast<int>(time(NULL));
    srand(j);
    int a = rand()%100+1;
    std::cout<<a;
return 0;
}

odpalam program... i wynik to 8, ok świetnie zamykam program odpalam go jeszcze raz i wynik to 15 następnie 23 i 31.
coś jeszcze źle robię?

0

Problem pojawia się tylko jeżeli odpalasz program w krótkich odstępach czasu. Ponieważ wartość którą inicjujesz generator liczb pseudolosowych niewiele się będzie różnić, bo inicjujesz go aktualnym czasem.
Zawsze możesz napisać swój generator, jeżeli masz na tyle umiejętności z matematyki, albo inicjować czymś innym, a nie czasem.

0

Ja tu problemu nie widzę. Odpal program 100 razy, w odstępach co najmniej sekundowych i zrób sobie histogram, myślę że nie powinno być wielkich nieprawidłowości.

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