Losowanie liczb rzeczywistych

0

Witam, mam problem, ponieważ pierwsza liczba która jest losowana, praktycznie zawsze jest identyczna. W jaki sposób to zmienić ?

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
    srand( time( NULL ) );
    int n;
    cout<<"Podaj n: "<<endl;
    cin>>n;
    double* a = new double[n+1];
    for(int i =0;i<n+1;i++){
        a[i]=(double)rand()/RAND_MAX;
    }
    for(int i=0;i<n+1;i++){

       cout<<a[i]<<endl;
    }
}


2

Nie używaj rand() z cstdlib tylko random z C++. Tam masz gotowe generatory oraz narzędzia do określania rozkładu.

0

Wyjaśnisz więcej o co chodzi?

/tmp $ ./a.out
Podaj n: 
4
0.429002
0.73218
0.561846
0.861974
0.761187
/tmp $ ./a.out
Podaj n: 
4
0.141284
0.0547472
0.662357
0.496776
0.624924
/tmp $ ./a.out
Podaj n: 
4
0.000733227
0.968282
0.967747
0.818359
0.559398
0
enedil napisał(a):

Wyjaśnisz więcej o co chodzi?

/tmp $ ./a.out
Podaj n: 
4
0.429002
0.73218
0.561846
0.861974
0.761187
/tmp $ ./a.out
Podaj n: 
4
0.141284
0.0547472
0.662357
0.496776
0.624924
/tmp $ ./a.out
Podaj n: 
4
0.000733227
0.968282
0.967747
0.818359
0.559398

u Ciebie nie ma tego problemu. U mnie za każdym razem pierwsza wylosowana liczba jest podobna.

1

@_13th_Dragon:
Takie coś może? Trzeba tylko sobie poszukać odpowiadającego stylowi w którym kodujesz opakowania (mam swoje, więc niestety nie wiem, która z bibliotek jest teraz trendy). Polecam repo pcg-cpp (używam ich engine).


auto lottomat = [](int from, int to) { 
  auto f_= [d_= std::uniform_int_distribution<int>(from, to), 
                  e_ = std::mt19937{ std::random_device{}() }]() mutable {
                    return d_(e_); 
   };  
   return f_; 
}
4
TomaszLiMoon napisał(a):

Polecam https://github.com/effolkronium/random

A ja nie polecam, a wręcz odradzam.
Opis "problemów" wskazuje, że autor tej "biblioteki" nie rozumie wymagań co do liczb losowych czemu seed jest wydzielony i czemu w C++11 wprowadzono klasy reprezentujące generator.
A stan globalny jest po prostu niedopuszczalny (to była główna wada API C, która byłą obchodzona za pomocą niestandardowego thread local storage). W tej bibliotece też użyto "thread local storage", a nadal nie jest wskazane by ten stan był współdzielony przez różny kod nawet z jednego wątku.

Trzeba wiedzieć, że nie wszystko złoto co się świeci, szczególnie w internecie.

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