FAQ |
Kalender |
![]() |
#11 | |||
|
||||
Mycket flitig postare
|
Conny, hur menar du att Random() ger samma resultat om man kör det igen? Du måste inte ge något frö för att det inte ska bli samma som förut, och du behöver heller inte specificera Environment.Tickcount, för den är redan baserad på tid.
|
|||
![]() |
![]() |
![]() |
#12 | ||
|
|||
Klarade millennium-buggen
|
Fast du får nog kolla dokumentationen en gång till i Ruby, för jag sökte på: "Ruby Random Seed" och hittade följande artikel: http://www.ruby-forum.com/topic/158679
Där en programmerare hade konstaterat vad jag befarade skulle hända. Upprepade slumptal, när Random anropas flera gånger. |
||
![]() |
![]() |
![]() |
#13 | ||
|
|||
Flitig postare
|
Citat:
|
||
![]() |
![]() |
![]() |
#14 | ||
|
|||
Klarade millennium-buggen
|
Citat:
Detta är inget ovanligt utan så har alla programspråk fungerat sedan jag först började programmera på slutet av 1970-talet. Nu har jag även konstaterat att Ruby inte är något undantag utan man måste initiera med ett "frö" för att hindra att slumpserien upprepas, det är fortfarande ingen garanti att talet är slumpmässigt men det är det bästa man kan åstadkomma i datorn idag. Sök på "Random seed" på internet så hittar du säkert massvis med artiklar just om detta fenomen. |
||
![]() |
![]() |
![]() |
#15 | |||
|
||||
Mycket flitig postare
|
Citat:
"Ge samma resultat om man startar om programmet och kör igen. Det är det normala i de flesta pogramspråk." Vilket inte är sant. Skulle jag kopiera din kod och köra den två gånger i rad så finns det inte en chans i världen att det skulle bli samma resultat. Du får mer "säkerhet" genom att ange ett frö, eftersom ingenting är helt slumpmässigt (logiskt?), men TS behöver verkligen inte ange ett frö, och därför behöver du inte kommentera det, eller påstå att han måste/bör det. |
|||
![]() |
![]() |
![]() |
#16 | ||
|
|||
Klarade millennium-buggen
|
Här är en mer aktuell artikel om Ruby: http://ruby.about.com/od/newinruby19...rs-In-Ruby.htm
Men observera att jag inte tycker Ruby är "sämre" eller dåligt på att hantera slumptal, det är datorn som hårdvara som sätter gränsen för hur slumpmässigt ett ta l kan vara, så samma förutsättningar gäller för alla programspråk som körs på samma dator. Citat:
|
||
![]() |
![]() |
![]() |
#17 | ||
|
|||
Klarade millennium-buggen
|
Citat:
Programmet använder något typ av matematisk formel för att beräkna ett tal som ska vara pseudoslumpmässigt. Matematik är per definition väldigt förutsägbart. men även på en kvantmekansisk nivå är datorn mycket förutsägbar. Det är bara vi människor som "upplever" att talen genereras slumpmässigt för att det är en så komplex formel att vi inte kan överblicka den med våra sinnen och intellekt. Senast redigerad av Conny Westh den 2012-12-02 klockan 23:50 |
||
![]() |
![]() |
![]() |
#18 | |||
|
||||
Mycket flitig postare
|
Och även jag säger samma sak, och gjorde det i min tidigare post. Det jag säger dock är att TS ej behöver ange ett frö, och du får det att verka som att det är absolut nödvändigt.
"// med ett slumpmässit frö annars får man upprepade serier av slumptal" "Dessutom måste man ha ett slumpfrö så slumpserien inte upprepas vid nästa körning." "men i de flesta programspråk jag kört genom åren så måste man alltid själv definiera ett "frö"" Det du säger är fel, och det var det jag poängterade. |
|||
![]() |
![]() |
![]() |
#19 | |||
|
||||
Mycket flitig postare
|
Det beror på vad man skall göra, skall man använda programmet i kommersiella syften ska man inte använda de vanliga random() funktionerna, oavsett språk. De genererar alldeles för dåliga slumptal. Många språk har bättre alternativ, Java och Ruby har SecureRandom, PHP har mt_rand() osv.
|
|||
![]() |
![]() |
![]() |
#20 | |||
|
||||
Mycket flitig postare
|
Jag tänkte inte ge mig in i debatten förutom att jag tror att Conny har fel i det här fallet. Man borde inte behöva ange seed när man skapar en ny instans av Random() eftersom den parameterlösa konstruktorn i sin tur anropar this(Environment.TickCount) vilket alltså ser ut att göra samma sak som att man själv skickar in värdet.
Vad Ruby har att göra i den här tråden där TS specifikt frågade efter C# har jag svårt att se. |
|||
![]() |
![]() |
Svara |
|
|