Avatar billede jansangill Nybegynder
26. marts 2008 - 22:44 Der er 8 kommentarer og
1 løsning

randomize, hvorfor hulen?

Randomize
key = Int(Rnd * 9054645132)

Hvorfor hulen kan det være at dette her de fleste gange propper 10 tal ud som den skal, og så nogle få gange kun 9 tal?

Er der en forklaring på det, for det må da være mig der gør noget galt.
Avatar billede olebole Juniormester
26. marts 2008 - 23:07 #1
<ole>

Rnd returnerer et tal mellem 0 og 1, så du skulle da også gerne ind imellem få tal med langt færre ciffre end 9  =)

/mvh
</bole>
Avatar billede jansangill Nybegynder
26. marts 2008 - 23:37 #2
Det er ikke sket endnu. Og forsøgt mange gange.

Har også prøvet med denne her, hvor det samme sker:

keyss = "0123456789"
Randomize
For i = 1 to 10
    keys = keys & mid(keyss,round(rnd*10)+1,1)
Next

response.write keys

Det samme sker der. Hovedsagligt 10 tal, men nogle gange også 9.
Avatar billede nielle Nybegynder
27. marts 2008 - 08:19 #3
Sandsynligheden for at få et tal med færre cifre er også væsentlig meget mindre end sandsynligheden for at få et med 9-10 cifre.

Som olebole fortæller generere Rnd et random-tal imellem 0 og 1:

Hvis dette tal er lig med 0,01144... så ville dit regnestykke give 1000000000 som er det mindste 10-cifrede tal. Dette betyder at i ca. 99 % af tilfældene (Rnd>=0,01144...) vil dit regnestykke give et 10 cifret tal og i de resterende 1 % et tal med 9 eller færre cifre.

For at din formel skulle give et 8- eller færre-ciffret tal skulle Rnd helt ned under 0,001144... Dette sker kun i 1 ud af ca. 1000 tilfælde.
Avatar billede nielle Nybegynder
27. marts 2008 - 08:20 #4
Grunden til at din 2. formel fejler er at i 1 ud af 10 tilfælde vil det første trukne ciffer være 0. Dette 0 fjernes med det samme igen fordi at vi nu engang ikke skriver vores tal med et foranstillet 0.
Avatar billede nielle Nybegynder
27. marts 2008 - 08:23 #5
Den "rigtige" måde at sikre sig at man får et tal med præcis 10 cifre er ved at gøre noget i stil med:

key = Int(Rnd * 900000000) + 100000000
Avatar billede fennec Nybegynder
27. marts 2008 - 08:24 #6
Du vil altså have et tal med 10 tegn, eller rettere et tal mellem 1000000000 og 9999999999. Brug denne formel:
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

Randomize
key = Int((9999999999 - 1000000000 + 1) * Rnd + 1000000000)

http://msdn2.microsoft.com/en-us/library/e566zd96(VS.85).aspx
Avatar billede fennec Nybegynder
27. marts 2008 - 08:25 #7
Nielle kom først :)
Avatar billede jansangill Nybegynder
27. marts 2008 - 08:51 #8
Jamen tak for forklaringen og hjælpen, begge.

Nielle smid du et svar.
Avatar billede nielle Nybegynder
27. marts 2008 - 10:07 #9
Svar :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester