[C++] Random float tussen 0 en 1

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • RealCato
  • Registratie: Juli 2000
  • Laatst online: 07-06 08:36
M$ Visual C++ 6.0 gaat het om.

Ik weet hoe ik een random integer krijg, maar ik heb een random float nodig om een kansberekening te doen. Ik geef zeg maar een kans waarmee ik een bep. opdracht wil doen, bijv. 0.2 Nu wil ik dat hij de opdracht doet als mijn random getal onder de 0.2 zit, en dat hij de opdracht neit doet als hij erbopen zit.

nu heb ik dit voor integers:

#include <stdlib.h>
srand(time(0));
rand()%2;

voor een integer die 0 of 1 is.
ik dacht erover om iets in deze trand te doen, maar dat werkt niet: float RandomNumber = (rand()%RAND_MAX)/float(RAND_MAX)

Rijtjeshuis 170 m^2 uit 1955, bij renovatie in 2022 dak/vloer/spouwisolatie, overal HR++, vvw benedenverdieping, 7x Jaga Strada en 2 handdoekradiatoren met Tado’s. Quatt hybrid op dakkapel sinds einde 2023.


Acties:
  • 0 Henk 'm!

  • RealCato
  • Registratie: Juli 2000
  • Laatst online: 07-06 08:36
argh zit de hele avond al met dit probleem en 't lijkt zich nu opgelost te hebben, dit werkt blijkbaar dus wel:

float probability = (rand()%RAND_MAX)/float(RAND_MAX);

maar ik vertrouw hier niet helemaal op dus elegantere oplossingen zijn nog welkom!

Rijtjeshuis 170 m^2 uit 1955, bij renovatie in 2022 dak/vloer/spouwisolatie, overal HR++, vvw benedenverdieping, 7x Jaga Strada en 2 handdoekradiatoren met Tado’s. Quatt hybrid op dakkapel sinds einde 2023.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18-06 18:12
Op maandag 18 maart 2002 23:10 schreef RealCato het volgende:
float probability = (rand()%RAND_MAX)/float(RAND_MAX);
Lijkt me een prima oplossing, hoewel het geen zin heeft rand() te modden met RAND_MAX, aangezien rand gegarandeerd niet groter zal worden dan RAND_MAX (vandaar de definitie).

Zelf zou ik het schrijven als: (float)rand/RAND_MAX, maar dat is een kwestie van smaak. Jou methode is net zo goed (en volledig wiskundig correct).

Acties:
  • 0 Henk 'm!

Anoniem: 26436

"0," + random Integer

Dit uitprogrameren en converteren naar float.

Acties:
  • 0 Henk 'm!

Anoniem: 37277

getal = rand() % 19+1;
getal = getal / 100;

Dan heb je een getal tussen de 0,01 en 0,20.
Of bedoel je dit niet, het is namelijk nogal simpel.

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 09:03

.oisyn

Moderator Devschuur®

Demotivational Speaker

maak daar maar van rand () / ((float)RAND_MAX + 1.f)

je wilt namelijk een waarde van 0 <= rnd < 1, en niet 0 <= rnd <= 1

Want stel je wilt een dobbelsteen simuleren. Daarvoor doe je floor (frand () * 6 + 1) (waarbij frand () je float random functie is)

als frand () 1 kan worden, dan is er een kans (van 1 / RAND_MAX) dat het 7 wordt, en dat moet natuurlijk niet :)


oh btw, casten naar float doe je dus door er (float) voor te zetten, en dus niet zoals jij deed: float (waarde)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 18-06 11:36
Op dinsdag 19 maart 2002 01:44 schreef OiSyN het volgende:
maak daar maar van rand () / ((float)RAND_MAX + 1.f)

je wilt namelijk een waarde van 0 <= rnd < 1, en niet 0 <= rnd <= 1

Want stel je wilt een dobbelsteen simuleren. Daarvoor doe je floor (frand () * 6 + 1) (waarbij frand () je float random functie is)

als frand () 1 kan worden, dan is er een kans (van 1 / RAND_MAX) dat het 7 wordt, en dat moet natuurlijk niet :)


oh btw, casten naar float doe je dus door er (float) voor te zetten, en dus niet zoals jij deed: float (waarde)
Kwestie van stijl. T(u) werkt in minder situaties als
(T)u, maar als het allebei werkt betekent het hetzelfde.
En voor T==float of een ander builtin type is het altijd hetzelfde.

Evengoed cast je natuurlijk met static_cast<> en familie.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 09:03

.oisyn

Moderator Devschuur®

Demotivational Speaker

ah ok dat wist ik niet :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1