Gauss vert. Zufallszahlen



  • Hey ich hab folgendes Problem ich soll folgende Aufgabe lösen:

    Zur erzeugung Gauss-verteilter Zufallszahlen sind folgende Anweisungen notwendig:

    d1=((double)rand() )/RAND_MAX;
    d2=((double)rand() )/RAND_MAX;
    n=m+s*sqrt(-2.0*log(d1)*cos(PI*2.0*d2)

    a)die zufallszahlen sollen am Bildschirm ausgegeben werden. m und s sind von der tastatur einzulesen.
    b)In einem INT-Vektor mit 8 Elementen soll die Häufigkeit der in den Intervallen [o,m-3s],[m-3s,m-2s],[m-2s,m-s],[m-s,m],[m+s],[m+s,m+2s],[m+2s,m+3s],[m+3s, unendlich],auftretenden Zufallszahlen gezählt werden und anschliessend am bildschirm ausgegeben werden.

    Mal abgesehen davon dass ich die Fragestellung nicht kapiert habe, hab ich also erstmal a) eingekloppt:

    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>

    main ()
    {
    int m, s;
    double d1, d2;
    float n;

    printf("Geben Sie m ein: \n");
    scanf("%lf", &m);
    printf("Geben Sie s ein: \n");
    scanf("%lf", &s);

    d1=((double)rand() )/RAND_MAX;
    d2=((double)rand() )/RAND_MAX;

    printf("Wert d1: %lf \n", d1);
    printf("Wert d2: %lf \n", d2);

    n=m+s*(sqrt(-2.0*log(d1))*cos(2.0*PI*d2));

    printf("%f", n);
    }

    Bei den Zufallszahlen d1,d2 kommt immer das gleiche raus ist ja auch klar da nur rand() bei n kommt immer irgend nen scheiss raus so ungefähr nan oder so.

    Also wäre schon mal nen grosses stück weiter wenn mir mal einer erklären würde was zum teufel ich überhaupt bei der Aufgabe machen soll und warum bei n kein anständiges Ergebnis rauskommt.

    Vielen Dank im voraus



  • Original erstellt von <ravenhurst>:
    ... Bei den Zufallszahlen d1,d2 kommt immer das gleiche raus i ...

    Du musst den Zufallszahlengenerator erst initialisieren. Das machst Du mit dieser Zeile

    srand(time(NULL));
    

    am Anfang Deines Programmes ...



  • m und s sind ints, also

    printf("Geben Sie m ein: \n");
    scanf("%d", &m);  // %d nicht lf!!!!
    printf("Geben Sie s ein: \n");
    scanf("%d", &s);
    

    [ Dieser Beitrag wurde am 05.11.2002 um 10:09 Uhr von Helium editiert. ]



  • Original erstellt von <ravenhurst>:
    **
    ...
    n=m+s*(sqrt(-2.0*log(d1))*cos(2.0*PI*d2));
    ---
    **

    was pasiert eigendlich wenn d1 größer 1 ist ?
    z.B: 10
    sqrt(-2.0 * log( 10 ) -> sqrt (-2.0 * 1 ) -> sqrt ( -2 )

    ist das erlaubt ?



  • wenn du c99 hast schon *g*



  • guter Tipp von westhoven, denn da wurde wohl was falsch abgeschrieben:
    in der Aufgabenzeile n=m+s*sqrt(-2.0*log(d1)*cos(PI*2.0*d2)
    fehlt nämlich eine Klammer.

    Der Rest der Aufgabe?
    Naja, produziere doch mal eine Serie von Zufallszahlen und zähle sie in den angegebenen Intervallen.
    int vec[8]; wäre ein Ansatzpunkt. Den Index zum Zählen kannst Du über verschiedene Techniken (einfachste: if-Abfragen) bekommen.


Anmelden zum Antworten