rand() mit doublewerten



  • Guten Tag,

    ich habe ein Problem und zwar mit folgender Zeile:

    int zufall= rand() %gesamt;
    

    und zwar ist gesamt immer ien double und die rand() funktion scheint ja ausschließlich mit integer werten zu arbeitn ..kann mir da jemand eine alternative bieten?

    ich habe mich shcon überall umgeguckt aber keiner scheint genau das problem zu haben ...



  • wofür brauchste das`?



  • ich hab ein koordinatensystem und dafür soll ich eine zufallskoordinate entstehen...und gesamt ist bspw die länge und ist bei mir im programm immer ein double

    ich ha schon vorher versucht

    int bla=gesamt*1000;
    int zufall= rand() %bla;
    

    aber da bricht mein programm immer ab. durch das*1000 ist bei meinen Beispeieln garantiert das bla kein double wert mehr ist



  • dann hast du aber nicht gut genug gegoogelt

    double drand(double max) {
      return (double)rand()/RAND_MAX * max;
    }
    


  • ich versteh nicht was max ist und wie ich daraus zufall rauskriege??
    mit dieser funktion kriegt man doch garkeinen wert raus 😕



  • !? schrieb:

    ich versteh nicht was max ist und wie ich daraus zufall rauskriege??
    mit dieser funktion kriegt man doch garkeinen wert raus 😕

    Stimmt nicht! Wie wendest du die denn an??

    EDIT: Das dürfte die Version mit zusätzlichem Minimum sein, falls du das auch brauchst (ungetestet):

    double drand(double min,double max) { 
    	return min+(double)rand()/RAND_MAX * (max-min); 
    }
    


  • ich weiss es ja nicht 😞



  • !? schrieb:

    ich weiss es ja nicht 😞

    Ok, kleines Beispielprogramm:

    double drand(double min,double max) { 
    	return min+(double)rand()/RAND_MAX * (max-min); 
    }
    
    int main() 
    { 
    	srand(time(0));
    	for(int i=0;i<100;i++) {
    		double d=drand(0.0,50.0);  // <= Aufruf!
    		std::cout << d << std::endl;
    	}
    	getchar();
    }
    


  • die grenzen sind bei mir ja 0-RAND_MAX

    int zufall= (double)rand() /RAND_MAX * RAND_MAX;
    

    ich hab die Funktion so noch nie gesehen und weiss garnichtw as ich damit machen soll

    double drand(double min,double max) { 
        return min+(double)rand()/RAND_MAX * (max-min); 
    }
    


  • also ich muss ja sagen das ich kein profi bin aber ist

    std::cout << d << std::endl;
    

    nicht ein anderes c?



  • !? schrieb:

    also ich muss ja sagen das ich kein profi bin aber ist

    std::cout << d << std::endl;
    

    nicht ein anderes c?

    Upps! Wir sind ja im C-Forum... 🤡

    Dann eben

    printf("%f\n",d);
    

    Btw: Also ich denke, die Parameter min und max der Funktion sind selbsterklärend, oder nicht? Wenn du von 0 bis RAND_MAX gehen willst, dann übergib halt genau diese Werte...



  • was macht denn die for-schleife da?



  • !? schrieb:

    was macht denn die for-schleife da?

    😮

    Die gibt dir einfach exemplarisch mal 100 erzeugte Zufallswerte aus...



  • das wollt ich doch garnicht ..ich will nur einen wert erstmal und das klappt ja cniht ..ich sitz hier shcon seit stunden dran und krieg das einfach cnith hin selbst mit dem was ihr mir hier postet. ich kapiers echt nicht.

    mit inter werten wär das ja alles total easy aber so ..ich glaube ich muss wohl kapitulieren

    aber nochmal kurz bei min=0 und ohne schleife:

    double min =0;
    double drand(double min,double RAND_MAX) 
    { 
        return min+(double)rand()/RAND_MAX * RAND_MAX; 
    }
    
    int main() 
    { 
        srand(time(0));
            double d=drand(0.0,50.0);  // <= Aufruf!
            printf("%f\n",d);
        getchar();
    }
    

    das wäre quasi meine variante istd as richtig?
    und wie kommste auf (0.0,50.0); oder solld as (double min,double RAND_MAX) sein?



  • !? schrieb:

    das wollt ich doch garnicht

    Das ja auch nur ein Beispiel, stand ja schließlich auch da... 🙄

    !? schrieb:

    aber nochmal kurz bei min=0 und ohne schleife:

    double min =0;
    double drand(double min,double RAND_MAX) 
    { 
        return min+(double)rand()/RAND_MAX * RAND_MAX; 
    }
    
    int main() 
    { 
        srand(time(0));
            double d=drand(0.0,50.0);  // <= Aufruf!
            printf("%f\n",d);
        getchar();
    }
    

    das wäre quasi meine variante istd as richtig?

    Klar, wenn du einfach einen einzelnen Wert brauchst, passt das für dich (abgesehen von den min-max-Werten).

    EDIT: NEIN! Hab nicht richtig hingesehen. Das kriegst du doch gar nicht kompiliert! Lass die Funktion so, wie sie ist, das ist schon richtig so. Als PARAMETER übergibst du dann deinen gewünschten Minimum-Wert (0) und deinen gewünschten Maximum-Wert (RAND_MAX). Bevor du solche Sachen hier postest, solltest du sie wenigstens mal ausprobieren...

    !? schrieb:

    und wie kommste auf (0.0,50.0); oder solld as (double min,double RAND_MAX) sein?

    Und wieder: Beispiel... ich weiß ja schließlich nicht, welche Werte du brauchst (hattest du vorher auch nicht erwähnt)...



  • Troll™



  • das wollt ich doch garnicht ..ich will nur einen wert erstmal und das klappt ja cniht ..ich sitz hier shcon seit stunden dran und krieg das einfach cnith hin selbst mit dem was ihr mir hier postet. ich kapiers echt nicht.

    mit inter werten wär das ja alles total easy aber so ..ich glaube ich muss wohl kapitulieren

    aber nochmal kurz bei min=0 und ohne schleife:

    double min =0;
    double drand(double min,double RAND_MAX) 
    { 
        return min+(double)rand()/RAND_MAX * RAND_MAX; 
    }
    
    int main() 
    { 
        srand(time(0));
            double d=drand(0.0,50.0);  // <= Aufruf!
            printf("%f\n",d);
        getchar();
    }
    

    das wäre quasi meine variante istd as richtig?
    und wie kommste auf (0.0,50.0); oder solld as (double min,double RAND_MAX) sein?



  • Tachyon schrieb:

    Troll™

    Ja, glaub ich langsam auch... 🙄



  • Mach's einfach so:

    double RAND_MAX(double RAND_MAX,double RAND_MAX) 
    { 
        return RAND_MAX+(double)rand()/RAND_MAX * RAND_MAX; 
    }
    
    int main() 
    { 
        srand(RAND_MAX(0));
        double d=RAND_MAX(RAND_MAX,RAND_MAX);  // <= Aufruf!
        printf("%f\n",RAND_MAX);
        getchar();
    }
    

    Dein Super-Compiler kriegt das sicher übersetzt, und da kommt bestimmt irgendwie und irgendwo irgendwas mit RAND_MAX raus... 😃



  • naja so wie ihr es hier postet klappts nicht sonst würd ich ja auch kaum weiternerven. aber ich lass es nun tschöö


Anmelden zum Antworten