Zufallszahlen


  • Administrator

    Ehm, was hat das mit dem Seed zurücksetzen zu tun? Du willst einfach zwei Random Objekte, welche dir Zufallszahlen liefern zu einem unterschiedlichen Seed. Dann benutz doch die Boost.Random Bibliothek:
    http://www.boost.org/doc/libs/1_38_0/libs/random/index.html

    Grüssli



  • Gut - gibts also doch was von boost ^^
    Naja - ich hätte ja den Seed jedes mal mit dem gespeicherten für das objekt swappen müssen, die fkt ausführen und dann wieder den gespeicherten setzen müssen...
    hatte mir das eigtl so gedacht gehabt (nur eben bissl gekapselt ^^):

    srand(123);
    std::cout << rand() << std::endl;
    
    long tmp = GetRandomSeed();
    srand(213);
    std::cout << rand() << std::endl;
    srand(tmp);
    
    std::cout << rand() << std::endl;
    

    man hätte auch ganz einfach die funktion rand() kopieren können und in der eigenen klasse verwenden können - so wie das unter dem link 3-5 posts über dem hier ist - aber das wollte ich nicht...
    naja - ich nehm boost - danke 🙂

    bb



  • Mir kommen hier grad ein paar fragen auf^^
    Gibt es dekomentationen zu

    #include <ctime>
    #include <cstdlib>
    

    falls ja wo?

    Und gibt es auch eine c++ wariante von denen und zu denne Dokumentationen?^^

    Mfg Wikinger75



  • Wikinger75 schrieb:

    Und gibt es auch eine c++ wariante von denen

    das sind bereits die c++-varianten.



  • häh?
    ich hab ja nix ggn fehlende interpunktion - so lang man den sinn noch verstehen kann sind mir auch tip- bzw rechtschreibefehler egal... aber du übertreibst ein wenig ^^

    falls ich dich richtig verstanden habe - da gibt es unter anderem das hier:

    http://www.cplusplus.com/reference/
    http://www.cppreference.com/wiki/

    bb



  • Wikinger75 schrieb:
    Und gibt es auch eine c++ wariante von denen

    das sind bereits die c++-varianten.

    Warum heit das dan cstdlib und nicht stdlib?

    häh?
    ich hab ja nix ggn fehlende interpunktion - so lang man den sinn noch verstehen kann sind mir auch tip- bzw rechtschreibefehler egal... aber du übertreibst ein wenig ^^

    falls ich dich richtig verstanden habe - da gibt es unter anderem das hier:

    http://www.cplusplus.com/reference/
    http://www.cppreference.com/wiki/

    bb

    Ich meinte eine Dokumentation zu den 2 Headern, damit ich weiß was für funktion etc. diese beinhalten^^
    Das was du gepostet hast sieht recht gut aus.



  • Wikinger75 schrieb:

    Wikinger75 schrieb:
    Und gibt es auch eine c++ wariante von denen

    das sind bereits die c++-varianten.

    Warum heit das dan cstdlib und nicht stdlib?

    vielleicht weil es ähnliche funktionen in C gibt.
    jedenfalls stehen diese headers im C++-Stan

    dart. also halte ich sie für c++.



  • Wikinger75 schrieb:

    Wikinger75 schrieb:
    Und gibt es auch eine c++ wariante von denen

    das sind bereits die c++-varianten.

    Warum heit das dan cstdlib und nicht stdlib?

    C-Header:
    time.h
    stdlib.h
    ...

    Passende C++-header:
    ctime
    cstdlib
    ...



  • unskilled schrieb:

    Bei einer Simulation sollten die Zahlen ja ein wenig zufällig sein aber auf jeden Fall reproduzierbar

    Das erreicht man, indem man seed immer mit dem gleichen Wert am Programmstart initialisiert. Dann hat man fuer gewoehnlich Zufallszahlen und wiederholbare Ergebnisse. Jedenfalls ist das die gaengige Praxis.



  • knivil schrieb:

    unskilled schrieb:

    Bei einer Simulation sollten die Zahlen ja ein wenig zufällig sein aber auf jeden Fall reproduzierbar

    Das erreicht man, indem man seed immer mit dem gleichen Wert am Programmstart initialisiert. Dann hat man fuer gewoehnlich Zufallszahlen und wiederholbare Ergebnisse. Jedenfalls ist das die gaengige Praxis.

    Ja - das ist mir durchaus bewusst - allerdings gibt es auch noch einen davon unabhängigen anderen Simulationszweig - wofür ich auch wieder Zufallszahlen brauche - und das wie gesagt: unabhängig davon. sonst würde mir der eine seed ja auch reichen ^^

    naja - boost4tw ;o)



  • @boost::random-user:

    Weiss jemand, warum man bei einer distribution z.B uniform_int die bounds nicht neu setzen kann?! - Zu implementieren wäre das ja trivial, aber möglich ist es nicht.. Ich habe dann halt ein Workaround gebraucht, dass mir von 0..1 die Bounds selbst berechnet, aber wirklich glücklich bin ich damit nicht..Oder übersehe ich da etwas?


  • Administrator

    drakon schrieb:

    Weiss jemand, warum man bei einer distribution z.B uniform_int die bounds nicht neu setzen kann?!

    Kann man doch. Naja vielleicht nicht ganz so offensichtlich, aber das folgende sollte doch wirklich reichen:

    boost::mt19937 engine;
    boost::uniform_int<> distribution(0, 10);
    
    boost::variate_generator
    <
    	boost::mt19937,
    	boost::uniform_int<>
    > generator(engine, distribution);
    
    std::cout << generator() << std::endl;
    
    // Verändern der Verteilung:
    generator.distribution()
    	= boost::uniform_int<>(2, 34);
    
    std::cout << generator() << std::endl;
    

    Grüssli



  • Naja.. Ich habe mehr so an eine Memberfunktion gedacht.. Wäre ja wirklich trivial. Die macht ja nix anderes, als das, was ich sonst auch mache.



  • unskilled schrieb:

    Ja - das ist mir durchaus bewusst - allerdings gibt es auch noch einen davon unabhängigen anderen Simulationszweig - wofür ich auch wieder Zufallszahlen brauche - und das wie gesagt: unabhängig davon. sonst würde mir der eine seed ja auch reichen ^^

    Dann lass diesen Simulationszweig in einem anderen Prozess laufen. Du kannst dir auch einen eigenen als Objekt basteln. In Numerical Recipes etc. sind die Implementierungen detailiert beschrieben. Der eine benutzt dann nur A.rand() und der andere B.rand().


Anmelden zum Antworten