Miten luodaan satunnaisgeneraattori, mikä ei tulosta kahta samanlaista numero peräkkäin C -kielellä..?? En miellään saa väänettyy vaikka kui yrittää...
satunnaisgeneraatori..??
kysymysmerkki2
7629
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 7
Vanhimmat
Ilmeisesti olet keksinyt miten satunnaislukuja tehdään ?
Kävikö mielessä että voit ottaa edellisen arvotun talteen muutujaan, ja arpoa niin pitkään että on eri arvoa.
kyl mie tajuun ton perusperiaatteen mut en vaan oikeen saa kehiteltyy sellasta functioo joko terkastas onks samoja vai ei....??
tyytyy sellaiseen mikä ei arvo numeroita mihinkään jakaumaan perustuen vaan tosiaan ihan hatusta heittää niitä numeroita, otat vaikka kellonajasta(millisekunnit) jonkun numeron ja katsot ettei se ole sama kuin edellinen funktion palauttama numero.
tehdä satunnaisluku generaattori joka takaisi että kaksi peräkkäistä lukua eivät olisi samoja. Vasinkin jos lukujoukko on pieni (esim kokonaislukuja 0-36). Muuten se ei olisi mikään satunnaislukugeneraattori.
Jos välttämättä haluat kirjoittaa itse satunnaislukugeneraattorin voit tutustua esim. Mersenne Twister tai Blum-Blum-Shub algoritmeimin.
Helpointa on luonnollisesti käyttä C:n sisäänrakennettu rand()-funktio ja tehdä tarkastus että peräkkäiset luvut eivät ole samoja, esim:
int lukualue, vanhaluku, uusiluku;
int lukumäärä;
lukualue = 100; //tuotetaan lukuja 0-100
lukumäärä =50; //tuetetaan sata satunnaislukua
vanhaluku = rand()*lukualue;
for(int i=0; i
Alkup. kirjoittaja ajoi varmaankin takaa sitä, että satunnaisuus ilmenee myös eri ajokerroilla.
Alusta satunnaislukugeneraattori ohjelman alussa näin:
srand((unsigned)time(NULL));
Ja käytä vasta sen jälkeen rand()-funktiota.
Tää on esin mitä Dekphissä olen käytänyt koska kyseesää on inline assemblu niin onnistuu jokaisella valistuneella kielellö.
asm
PUSH EDI
MOV EAX, MF3
MUL M3
MOV ECX,EAX
MOV EAX, M2
MOV EDI,EDX
MOV M3, EAX
MUL MF2
ADD ECX,EAX
MOV EAX, M1
ADC EDI,EDX
MOV M2,EAX
MUL MF1
ADD ECX,EAX
MOV EAX,M0
ADC EDI,EDX
MOV M1,EAX
MUL MF0
ADD EAX,ECX
ADC EDX,EDI
ADD EAX,MC
ADC EDX,0
MOV M0,EAX
MOV MC,EDX
LEA EDI,EXTEND
MOV [EDI],EAX
FILD EXTEND
POP EDI
FMUL F2M32
end;
Muuten hyvä asm -koodi muttei oo paljon käyttöö ku puuttuu muuttujat. Mitä ovat esim. M1,M2,M3,MF2,MF3 ?
Toiseksi kannattais varmaan käytellä muistiosoitteista luvussa ja kirjoituksessa hakasulkeita et ois paremman näköstä ;)
Jotenki on kyll semmonen muistikuva et prossuissaki oli jonkinlainen satunnaislukugeneraattori. En vaan jaksa muistaa miten luvun sai ulos.