[C/C++] Zufallszahlen in C

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von mose, 7. April 2011 .

Schlagworte:
  1. 7. April 2011
    Zufallszahlen in C

    Hallo,

    ich brauch Zufallszahlen im Bereich von 1000 - 99999 !

    Meine Zeilen dazu sehen wie folgt aus:

    int generieren(){
    int zahl;
    srand (time(NULL));
    zahl=rand()%1000+10000;
    return zahl;
    }

    Wenn er mir nun die Zahlen ausgibt, verändern die sich nur geringfügig um +2 oder +1..
    Ich brauche aber Zahlen die wirklich "Zufall" sind..
    z.b.
    78512 dann 11056 etc...

    Hat einer eine Lösung parat?
     
  2. 7. April 2011
    AW: Zufallszahlen in C

    Das liegt daran, dass Du jedesmal, wenn Du die Funktion auch srand mit einem neuem Seed aufrufst.
    Ruf srand() in deinem Programm einmalig zum Initialisieren auf und es sollte laufen wie gewünscht.

    PS: 1000-10000 < "78512 [..], 11056"
     
  3. 7. April 2011
    AW: Zufallszahlen in C

    außerdem kriegst dua cuh nur mit dem Code Zufallszahlen zwischen 10000 und 10999
     
  4. 7. April 2011
    AW: Zufallszahlen in C

    Wie lautet denn der code nun richtig damit ich 1000-99999 raus bekomme?

    Mein COde lautet nun;

    int generieren(){
    int zahl;
    zahl=rand()%1000+100000;
    return zahl;
    }

    // Wenn ich die nun ausgebe kommen immer nur zahlen zwischen 1000 und 99999 raus...
    Woran liegt es?

    srand (time(NULL)); -->habe ich nun am Programmanfang stehen!
     
  5. 7. April 2011
    AW: Zufallszahlen in C

    zb srand in deiner main aufrufen um es nur einmal zu initialisieren. und überleg doch mal... rand()%1000 ergibt ne zahl zwischen 0 und 999, das dann +10000 = 10000 bis 10999.

    vielleicht hilft dir das hier:
    srand
    rand
     
  6. 7. April 2011
    AW: Zufallszahlen in C

    Wie gesagt, schau dir die o.g. Referenzen an. Danach dürfte alles klar sein.

    closed.
     
  7. 10. April 2011
    AW: Zufallszahlen in C

    Thread wieder ON!

    rand(); gibt maximal 32767 aus.
    Daher hab ich mir folgendes gebastelt:

    nt generieren_a(){
    int PLZ,summand_1,summand_2,summand_3;
    summand_1=rand() ;
    summand_2=rand() ;
    summand_3=rand() ;
    PLZ=summand_1+summand_2+summand_3+1000;
    return PLZ;
    }

    Gibt es einen Besseren Weg solche Zahlen zu erzeugen, mit einer gleichen Wahrscheinlichkeit?
    Die Zahlen die er ausgibt sin meist im bereich 50000 und 70000.
    Die zahlen 1000 bis 10000 gibt es so gut wie gar nicht.
    Ich bräuchte die gleiche Wahrscheinlichkeit für alle zahlen zwischen 1000 und 100000.

    mfg
     
  8. 10. April 2011
    AW: Zufallszahlen in C

    Wenn das dir so wichtig ist musst du dir eben einen eigenen Zufallszahlengenerator programmieren.

    Die Implementierung in C ist glaube ich besonders schlecht. Besser ist es z.B. in Java.

    java:

    Code:
    protected synchronized int next(int bits)
    {
     seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);
     return (int) (seed >>> (48 - bits));
    }
    Der Code in C ist genauso "billig" wie in Java, aber das Geheimnis ist eben diese "Zauber-Zahl". C verwendet die Zahlen 0x343FD und 0x269EC3.

    Da kannst du dir also leicht was eigenes basteln.
     
  9. 11. April 2011
    AW: Zufallszahlen in C

    Auf der Suche nach N0S' Hexwerten bin ich grad auf drand48() gestoßen, läuft so wie es aussieht nur unter Unixsystemen aber vielleicht reicht das ja.

    Ansonsten guck dir mal Mersenne-Twister an, der hat eine hohe Gleichverteilung und kann große Zufallszahlen erzeugen. Außerdem ist er frei für C verfügbar (siehe Weblinks wikipedia).
     
  10. 11. April 2011
    Zuletzt von einem Moderator bearbeitet: 15. April 2017
    AW: Zufallszahlen in C

    Ich wäre mit der Aussage vorsichtig. Ich habe gehört, dass der nicht der beste ist, aber zumindestens echte Zufallszahlöen generiert.

    da fällt mir ein:
    Spoiler
    14_is_not_a_random_number_tshirt-p235047239743529386qmbd_400.jpg
    {img-src: //rlv.zcache.com/14_is_not_a_random_number_tshirt-p235047239743529386qmbd_400.jpg}

    14_is_a_random_number_tshirt-p235046315951603929qsxw_400.jpg
    {img-src: //rlv.zcache.com/14_is_a_random_number_tshirt-p235046315951603929qsxw_400.jpg}

    @Threadersteller

    schreib mal ganz oben hin: #define RAND_MAX 100000
    Vielleicht hilft das...
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.