Zufallszahlen erstellen


  • Administrator

    moagnus schrieb:

    Oder einfach /dev/urandom benutzen.

    Und was soll das sein??? Scheint irgendetwas mit Unix am Hut zu haben, daher schon sicher mal nicht Platformunabhängig. Also grundsätzlich idiotisch das hier zu empfehlen. Und ist es dazu womöglich noch ein externes Programm? Dann wäre es ja völlig blöd.

    Wenn schon einen anderen Zufallsgenerator, dann die Boost.Random Variante:
    http://www.boost.org/doc/libs/1_36_0/libs/random/index.html

    Grüssli



  • Nee nee du hast nicht richtig gelesen der Threadsteller hat nach einer Linuxvariante gefragt 😉

    redbomber schrieb:

    ...
    Für Windows gibt es da einige Befehle, aber wie kann man so etwas unter Linux machen?



  • Er fragte aber nach einer Möglichkeit eine höhere Auflösung der Zeit unter Linux, damit er seed besser füttern kann. :p


  • Administrator

    Aber was ist es denn nun eigentlich? Ich kann ja auch einfach /dev/gibmireinezufallszahl hinschreiben. Das hat mich ja persönlich am meisten gestört, einfach nur ein Pfad anzugeben. Ist das ein Programm? Eine Bibliothek? Oder sonst etwas? Wie sollte man es verwenden? Und wieso sollte man es verwenden, wenn die Lösung nur darin besteht den Seed einmal zu setzen? Hat es Vorteile gegenüber rand() ? Vorteile gegenüber Boost.Random?

    Fragen über Fragen 🙂

    Grüssli



  • Ist ein Device das Zufallszahlen liefert.

    #include <iostream>
    #include <fstream>
    
    int main(){
        std::ifstream str("/dev/urandom");
        unsigned int i;
        str.read((char*)&i, sizeof(i));
        std::cout << i%100 << std::endl;
    }
    


  • grundsätzlich idiotisch

    Geht das auch ein bisschen netter?

    Dann wäre es ja völlig blöd.

    Sonst noch irgendwelche Probleme?

    Eigentlich jeder, der mit Linux mal gearbeitet hat, ist über die Random-Devices gestolpert. Ich schätze sogar, dass diese auch benutzt werden dürfen. Und nach dem Grundsatz "everything in Linux is a file" lässt sich wie aus auch sonst jeder Datei daraus lesen.

    Achja: Man darf sich übrigens auch kurz informieren, bevor man hier herumplärrt. Es ja keiner gezwungen, eine Lösung auszuformulieren, Tipps müssen genügen.



  • moagnus schrieb:

    Eigentlich jeder, der mit Linux mal gearbeitet hat, ist über die Random-Devices gestolpert. Ich schätze sogar, dass diese auch benutzt werden dürfen. Und nach dem Grundsatz "everything in Linux is a file" lässt sich wie aus auch sonst jeder Datei daraus lesen.

    Wobei ich (vom Tonfall vielleicht mal abgesehen) Dravere Variante dennoch den Vorzug geben würde. Wenn es eine Plattformunabhängige Lösung gibt, dann ziehe ich diese in der Regel vor (sofern sonst keine speziellen Argumente dagegen sprechen). Es mag zwar unwahrscheinlich sein das jemand ein Programm das speziell für Linux oder ein anderes BS geschrieben wurde, irgendwann portiert wird, aber gänzlich ausschließen kann man es auch nicht (Logik halte ich gerne in AnsiC++ sowie verbreiteten portablen Bibliotheken)

    cu André


  • Administrator

    @moagnus,
    Sorry, war etwas verärgert wegen dem blöden wxWidgets und dem idiotischen Finanzminister Steinbrück. *Schweizer ist*

    Aber im Grundsätzlichen bleibe ich bei meiner Aussage, genau aus den Gründen die asc geschrieben hat.
    Im übrigen habe ich schon mit Linux gearbeitet, sogar darauf programmiert. Kenne dieses urandom trotzdem nicht. Habe bisher aber auch noch nie zufällige Zahlen auf Linux benötigt. Was aber meiner Meinung nach noch wichtiger ist, der Threadersteller kennt die Sache auch nicht. Eine solche Voraussetzung zu setzen, ist also schon mal falsch.
    Ein Link dazu, ein kurzes Beispiel, wie von Fellhuhn, oder eine kurze Bemerkung, wie von dir "everything in Linux is a file", wäre hilfreich gewesen. Damit man immerhin weiss, was man in etwa damit machen müsste oder noch ein paar zusätzliche Stichworte für eine Suche hätte 😉
    Trotzdem ist es allerdings ein wenig fraglich, wieso man denn nun /dev/urandom verwenden sollte. Das konnte bisher auch noch keiner beantworten. Wieso sollte man von srand und rand weg zu /dev/urandom? Wieso empfiehlst du es, das ist das Mindeste, was in deinem Beitrag noch fehlt.

    Grüssli



  • Weil das Ergebnis vorhersagbar ist, wenn der Input bekannt ist. Die "Zufallszahlen" enstehen nämlich durch einen berechnenden Algorithmus, womit es nur noch Pseudozufallszahlen sind.
    /dev/urandom - oder noch besser /dev/random - sammelt seine Informationen im physikalischen System zusammen, bspw. werden die Zeitintervalle zwischen dem Eintreffen von Paketen an der Netzwerkkarte benutzt. urandom unterscheidet sich von dem sichereren random dadurch, dass es sich selbst nach Initialisierung als Datenquelle zur weiteren Generierung benutzt. Damit hat es eben auch mehr Output anzubieten.

    Das Ganze ist aber eine (recht mathematische) Wissenschaft für sich. Ich wollte in meinem ersten Post einfach nur eine Alternative anbieten. 🙂



  • Boost.Random benutzt übrigens (zumindest unter Gentoo gepatcht, ich weiß nicht ob das mittlerweile im Hauptzweig so ist) /dev/urandom als Seed.
    Unter Linux wirst du ja wahrscheinlich den gcc verwenden, da ist in std::tr1 auch die neue Zufallszahlenbibliothek drin, die stark an Boost.Random angelehnt ist (halt nur Standard und ohne Boost-Abhängigkeiten).



  • moagnus schrieb:

    Das Ganze ist aber eine (recht mathematische) Wissenschaft für sich.

    Ich empfehle dir, dich mal mit den boost-Möglichkeiten (in Vorgriff auf C++0x) auseinander zu setzen, es ist nämlich weit mehr als srand (die "engine" kann gewählt werden, und ist bei weiten nicht mehr so simpel).

    cu André



  • /dev/random und /dev/urandom sind noch nicht einmal unter Unix richtig standardisiert. Ich weiss nicht, ob es so eine gute Idee ist es so zu machen, wenn man portable Alternativen hat.



  • mit den boost-Möglichkeiten auseinander zu setzen

    Als ich meinen ersten Post hier geschrieben hab, hatte noch keiner boost genannt. Aber danke für den Tipp.

    wenn man portable Alternativen hat

    aber wie kann man so etwas unter Linux machen

    Aber ja, du hast Recht, portable Alternativen sind vorzuziehen.


Anmelden zum Antworten