Päätin aloittaa koodaamaan, ja aivan perusteista pitää aloittaa. Heti alussa törmäsin seuraavanlaiseen ongelmaan: yritin luoda satunnaista lukua alla olevalla ohjelmalla, mutta kun ajan ohjelman, niin tuloksena ovat aina samat luvut (41.000000 ja 18467). Eikö rand:n pitäisi arpoa luku satunnaisesi?
#include
#include
#include
int main()
{
float a = rand();
printf("number is %f \n", a);
int b = rand();
printf("number is %d \n", b);
getch();
return(0);
}
#include
#include
#include
int main()
{
float a = rand();
printf("number is %f \n", a);
int b = rand();
printf("number is %d \n", b);
getch();
return(0);
}
Vastaukset 5
Vanhimmat
et silleen
Kokeilinkin tuota srandia aikaisemmin seuraavalla tavalla:
srand(time(NULL));
mutta sen jälkeen luku ei edelleenkään ollut satunnainen, vaan se kasvoi jokaisen ajokerran jälkeen hieman.
Ja esim. aikaisemmassa esimerkissä vasta jälkimmäisessä satunnaisuus näyttää toimivan, vaikka srandi on ensimmäisenä.
Luku satunnaisluku saadaan vasta srand:n jälkeen rand:lla (kts. C:n käyttöohje):
int i;
srand((unsigned)time());
for(i=0;i
Joo, ohjelmointikielten satunnaislukugeneraattoreissa on se hauska piirre että niillä saa todellisia satunnaislukuja ainoastaan alustamalle ne satunnaisluvulla. Hehheh. Muuten tulee joka ajokerta samat satunnaisluvut.
Timestamppia käytetään tyypillisesti generaattorin alustamiseen.
Isaac, Mersenne Twister, PRNG, LFSRNG jne...
Edellämainitut ovattavat satunnaisalustukseen koneesta paljon muutakin kuin kellon, yleensä
kymmeniä muuttujia jopa prosessorin tilasta.