Avatar billede mailand Nybegynder
16. marts 2004 - 09:40 Der er 13 kommentarer og
1 løsning

Kan man stole på Randomize?

Okay, men jeg har læst mig til, Randomize baserer sig selv på tiden, når den laver noget tilfældigt.

Hvad så hvis man afkræver den noget tilfældigt 2 eller flere gange på samme sekund... Kunne det så tænkes, det genererer den samme 'tilfældighed' ?

Mailand
Avatar billede fennec Nybegynder
16. marts 2004 - 09:49 #1
Hvad jeg ved af bruger den tiden samt den sidste værdi der er kommet ud. Så det skulle helst være forskelligt.
Avatar billede nmh Nybegynder
16. marts 2004 - 11:25 #2
Den er lavet, så man kan vælge mellem at få de samme sekvens af tilfældige tal, når man kører sit program, eller man kan få en ny sekvens.
Det første er rart, når man vil teste et program. Så er det vigtigt at få den samme række af tilfældige tal.
Hvis man bruger den anden mulighed (man giver ordren randomize) får man en ny sekvens af tilfældige tal. Det er vist nok baseret på uret i maskinen. Men det tæller jo ikke sekunder, men kører langt hurtigere, og derfor har man ikke det problem, du antyder skulle findes.
Tilfældighedsgeneratoren er undersøgt og du kan roligt regne med at de opfører sig som "tilfældige tal".
Avatar billede mailand Nybegynder
16. marts 2004 - 11:38 #3
hmm... det forstår jeg simpelthen ikke, så...

er der umiddelbare 'flaws' i denne funktion?

---------

function generateRandom(intAntalTegn, intRandomType)
    ' intAntalTegn : number of random characters to be generated
    ' intRandomType : 0 = int, 1 = chr, 2 = both
   
    select case int(intRandomType)
        case 0
            for x = 1 to intAntalTegn
                randomize
                intWildChar = int(rnd * 9) + 1
                strRandom = strRandom & intWildChar
            next
        case 1
            for x = 1 to intAntalTegn
                randomize
                intWildChar = int(rnd * 57) + 65
                    if intWildChar => 91 and intWildChar <= 96 then
                        intWildChar = intWildChar + 8
                    end if
                strRandom = strRandom & chr(intWildChar)
            next
        case 2
            for x = 1 to intAntalTegn
                randomize
                intChooser = int(rnd * 2) + 1
                select case intChooser
                    case 1
                    intWildChar = int(rnd * 57) + 65
                        if intWildChar => 91 and intWildChar <= 96 then
                            intWildChar = intWildChar + 8
                        end if
                    strRandom = strRandom & chr(intWildChar)
                    case else
                    intWildChar = int(rnd * 9) + 1
                    strRandom = strRandom & intWildChar
                end select
            next
    end select
        generateRandom = strRandom
end function

---------

Tilsyneladende får jeg altså sammenfaldende id'er ret tit, med 10 tals random...

#Mailand
Avatar billede nmh Nybegynder
16. marts 2004 - 11:50 #4
Mener du noget i stil med 8759768177
Du kan ikke ved blot at se på nogle få kørsler afgøre om det er tilfældigt nok.
Hvis man beder en person om at angive en række tilfældige tal, bliver de netop ikke tilfældige. For et menneske vil synes, at der ikke må være 2 8-taller i nærheden af hinanden f.eks.
Avatar billede mailand Nybegynder
16. marts 2004 - 12:18 #5
det forholder sig sådan, jeg har en tabel med 62.000 records, hvor jeg ikke helt tror på, det tilfældige element er unikt.
Avatar billede nmh Nybegynder
16. marts 2004 - 13:39 #6
Det minder jo lidt om fødselsdagsproblemet:
Chancen, for at der er mindst 2 personer med samme fødselsdato i en gruppe på 25 personer er større end 50%.
Her vælger du 25 gange en tilfældig dato fra 365 forskellige.

Hvor mange gengangere fandt du blandt dine 62000 sæt af 10 tal valgt tilfældigt?
Avatar billede mailand Nybegynder
16. marts 2004 - 13:42 #7
der kan være flere records pr. 'unikke' id.

... det ser bare ud som om, jeg får for mange hits pr unikke id... jeg ved ikke noget med sikkerhed - kun ren formodning.
Avatar billede nmh Nybegynder
16. marts 2004 - 14:38 #8
Hvis man 62000 gange vælger et talsæt udfra 10^10 forskellige er chancen 0,53 for at mindst 2 sæt bliver ens.
Avatar billede mailand Nybegynder
16. marts 2004 - 14:59 #9
jeg brugte bogstaver som unik id.

nu har jeg brygget en ny løsning sammen, hvor det unikke genereres på baggrund af både ip og unik id - x.x.x.x.unikid

Så kan jeg virkelig ikke forstå, hvis det stadgivæk kan give problemer. nu får vi at se.
Avatar billede nmh Nybegynder
16. marts 2004 - 15:36 #10
Ups: jeg glemte at regne med nok betydende cifre i det matematikprogram, jeg benyttede til at udregne sandsynligheden.
0,53 skal ændres til 0,17.
Hvor mange bogstaver brugte du for at generere unikid?
Avatar billede mailand Nybegynder
16. marts 2004 - 15:38 #11
10
Avatar billede nmh Nybegynder
16. marts 2004 - 15:52 #12
Hvis man vælger 10 bogstaver tilfældigt blandt 28 vil chancen for gengangere blandt 62000 være 6,4*10^(-6).
Altså 0,0000064.
Avatar billede mailand Nybegynder
16. marts 2004 - 15:55 #13
ja... altså med mindre, der er noget, der ikke spiller max i enten min funktion eller bare randomize() generelt... Men skidt. jeg tror, jeg har noget nu, jeg kan bruge (mit x.x.x.x.unikid system)

Men tak for hjælpen.
Avatar billede nmh Nybegynder
16. marts 2004 - 18:26 #14
selv tak, det var så lidt. takker for point. :o)
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

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Solution Manager til Cyberdivisionen

Politiets Efterretningstjeneste

Configuration Manager til PET's IT-afdeling

Netcompany A/S

IT Consultant

Riskpoint A/S (Riskpoint Solutions Limited)

Senior Developer