Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

uniform_int_distribution zawsze zwraca max

Ostatnio zmodyfikowano 2020-03-14 16:00
Autor Wiadomość
zerotwarzygreya
Temat założony przez niniejszego użytkownika
uniform_int_distribution zawsze zwraca max
» 2020-03-12 11:07:38
Cześć, moglibyście mi wytłumaczyć czemu funkcja random zawsze zwraca największą wartość z zakresu (operuje na małych zakresach od 1 do maksymalnie 3)?

C/C++
#include <iostream>
#include <fstream>
#include <map>
#include <string>
#include <random>
#include <sstream>

using namespace std;

void create_map( ifstream & file, multimap < string, string >& m )
{
    string line;
    string word;
    while( getline( file, line ) )
    {
        istringstream s( line );
        s >> word;
        m.insert( make_pair( word, line.substr( word.size() + 1 ) ) );
    }
   
}

size_t random( default_random_engine & x, size_t num )
{
    uniform_int_distribution < unsigned > z( 1, num );
    return z( x );
}

int main()
{
    ifstream rules( "Text.txt" );
    ifstream work( "Work.txt" );
    multimap < string, string > w_trans;
    create_map( rules, w_trans );
    string calls;
    default_random_engine x;
    while( getline( work, calls ) )
    {
        string word;
        istringstream s( calls );
        while( s >> word )
        {
            auto it = w_trans.find( word );
            if( it == w_trans.end() )
            {
                cout << word << " ";
                continue;
            }
            for( size_t i = random( x, w_trans.count( word ) ); i != 1; --i, ++it );
           
            cout << it->second << " ";
        }
        cout << endl;
    }
}
P-176349
TemplateEntity
» 2020-03-12 17:34:35
Użyj biblioteki chrono i ustaw odpowiednie ziarno rozkładu.
C/C++
#include <chrono>
....
....
x.seed( std::chrono::system_clock::now().time_since_epoch().count() );
....
....
P-176353
zerotwarzygreya
Temat założony przez niniejszego użytkownika
» 2020-03-12 18:06:31
Czyli jak chce generować randomowe liczby to przy każdej iteracji muszę ustawić seeda? Ponoć wybranie odpowiedniej liczby do seeda jest dość trudne macie dla mnie jakieś porady jak to robić.
@up Dzięki za kod teraz program generuje randomowe wyniki.
P-176356
pekfos
» 2020-03-14 16:00:34
Czyli jak chce generować randomowe liczby to przy każdej iteracji muszę ustawić seeda? Ponoć wybranie odpowiedniej liczby do seeda jest dość trudne macie dla mnie jakieś porady jak to robić.
Wszystkie generatory pseudolosowe wymagają inicjaliacji. Dla tego samego ziarna będziesz dostawać te same sekwencje liczb, więc najprawdopodobniej powinieneś to robić dokładnie raz, a nie w pętli. Co do samej wartości, wszystko zależy czego potrzebujesz. Jedynym uniwersalnym rozwiązaniem jest użycie sprzętowego generatora (jeśli jest dostępny) do wylosowania ziarna. Wszystkie inne sposoby trzeba dostosować do potrzeb, zwykle wystarczy aktualny czas, jak podano powyżej. Pamiętaj jednak że w ten sposób ryzykujesz to samo ziarno w wielu generatorach w obrębie tego samego programu, lub w tym samym generatorze w obrębie wielu niezależnych procesów.
P-176363
« 1 »
  Strona 1 z 1