Slumpmässiga siffror

Slumptal och .NET

Slumpmässiga siffror

Slumptalsgeneratorer har utgjort en del av många matematiska bibliotek, operativsystem och programmeringsspråk under lång tid. I många fall är du försedd med en enkel funktion som returnerar ett slumpmässigt flyttalsvärde mellan noll och ett, och detta nummer kan sedan manipuleras för användning i din applikation efter behov. Till exempel, om du vill skriva ett program för att generera slumpmässiga brittiska nationella lottotal, multiplicerar du det returnerade flyttaltalet med 100 och förkastar sedan alla värden över 40 och eventuella dubbletter. National Lottery-bidrag består av en serie med sex nummer mellan ett och 40, utvalda slumpmässigt av en maskin.

För att hjälpa dig att generera slumptal innehåller .NET klassen System.Random och, med tanke på .NETs karaktär, gör denna klass det möjligt för dig att skapa så många oberoende slumptalsgeneratorer som du kan behöva.

Genom att använda PowerShell för att generera ett enkelt slumptal med klassen System.Random kan du skriva in följande kommandon:

PSH [D:foo]: $rand = New-Object System.Random

PSH [D:foo]: $rand.next()

2114794700

Observera att om du kör dessa två rader inuti PowerShell (skapar ett nytt System.Random-objekt och använder Next()-metoden för att generera ytterligare ett slumptal) får du andra resultat. Vid testning fick jag följande siffror från att återanvända koden ovan tre gånger till: 655267270, 268440714 och 1673116976. Anledningen till att dessa siffror varierar är att .NET automatiskt använder ett slumpmässigt frö när ett nytt slumptalsobjekt skapas. Om du ville att det skulle använda ett statiskt eller känt frö – så att du kan reproducera samma resultat under programtestning – kan du ange vilket frö som ska användas när du anropar New-Object, enligt följande:

PSH [D:foo]: $rand = New-Object System.Random 999999999

PSH [D:foo]: $rand.next()

843855569

Det nya slumpmässiga objektet har bara sju metoder, som listas här:

PSH [D:foo]: $rand | gm

Typnamn: System.Random

Namn MemberType Definition

—- ———- ———-

Equals Method System.Boolean Equals(Object obj)

GetHashCode Method System.Int32 GetHashCode()

GetType Method System.Type GetType()

Nästa metod System.Int32 Next(), System.Int32 Next(Int32 minValue, Int32 maxValue), System.Int32 Next(Int32 maxValue)

NextBytes Method System.Void NextBytes(Byte[] buffert)

NextDouble Method System.Double NextDouble()

ToString Method System.String ToString()

Den viktigaste är metoden Next(), som har tre överbelastade definitioner:

Next() returnerar ett enkelt slumpmässigt 32-bitars heltal mellan 1 och 232.

Nästa (minvärde, maxvärde) returnerar ett slumpmässigt tal mellan min- och maxvärdena.

Next(max value) returnerar ett slumpmässigt tal mellan 1 och maxvärdet, vilket kan vara användbart för National Lotto-nummergeneratorn.

Med hjälp av ett statiskt frö, som gör att du kan köra PowerShell och återskapa mina exakta resultat hemma, kan du anropa var och en av dessa inifrån PowerShell, som visas här:

PSH [D:foo]: #Skapa ett slumpmässigt objekt med icke-slumpmässigt frö

PSH [D:foo]: $rand = New-Object System.Random 999999999

PSH [D:foo]: #Generera två ”nästa” slumptal

PSH [D:foo]: $rand.next()

843855569

PSH [D:foo]: $rand.next()

244741315

PSH [D:foo]:# skapa ytterligare två slumpmässiga tal mellan 1 och den övre gränsen

PSH [D:foo]: $rand.next(40)

21

PSH [D:foo]: $rand.next(40)

37

PSH [D:foo]: #Skapa två slumpmässiga tal mellan en nedre och en övre gräns

PSH [D:foo]: $rand.next(123 340)

Lämna en kommentar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *