[JS] Math.random() ==> Echt random?

Pagina: 1
Acties:

  • Victorio
  • Registratie: Januari 2001
  • Laatst online: 01-02-2024
Stel het volgende scriptje:

var numb = 4
title_text = new Array();
title_text[0] = "1bla!";
title_text[1] = "2bla!";
title_text[2] = "3bla!";
title_text[3] = "4bla!";

var randomtext = title_text[Math.round(Math.random()*numb)];
document.write(randomtext);

Is dat Math.random() getal ook echt random? Heeft het met parse tijd te maken ofzo? Ik heb het vermoeden dat als ik een array van 10 heb sommige echt veel vaker voorkomen dan anderen... :?
En stel ik heb een array van 10, kan ik het oplossen door alles er 'dubbel' in te zetten zodat het 20 dubbele worden? (komen dan de title_texts die normaal minder vaak voorkomen vaker voor?)

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Victorio, naar mijn idee is het écht altijd random... Hoewel ik (er net zoals jou) weleens aan heb getwijfeld kan ik je verzekeren (ooit ergens een artikeltje tegengekomen, kan het nu niet vinden) waarin dat was getest..

Verwijderd

Ach, je kunt het zelf toch ook wel testen. Ik heb het ook 's een keer gedaan, en 1/6 kans bij een dobbelsteen om 6 te gooien was idd ongeveer ongeveer 0,16666666 na 10K keer gooien.

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Als jij Math.round() gebruikt beinvloed je inderdaad de random :) 0.5 wordt dan namelijk naar 1 afgerond, en dan komt 0 als waarde relatief een stuk minder vaak voor. Idem voor de hoogste waarde die eruit kan komen. Met random kan je dus beter Math.floor() gebruiken. Volgens mij gaat je voorbeeld zo trouwens ook soms fout. round random 4 kan op 4 uit komen, en er is geen text[4].

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:41

crisp

Devver

Pixelated

Verwijderd schreef op 22 oktober 2002 @ 09:19:
Ach, je kunt het zelf toch ook wel testen. Ik heb het ook 's een keer gedaan, en 1/6 kans bij een dobbelsteen om 6 te gooien was idd ongeveer ongeveer 0,16666666 na 10K keer gooien.
Random is meer dan alleen de verdeling; ook de spreiding is belangrijk, en er mogen geen regelmatige reeksen in voorkomen.
Echt random bestaat imho niet als het om gegenereerde getallen gaat, maar voor praktische toepassingen is het random genoeg.

Intentionally left blank


Verwijderd

een random functie bestaat niet want het is altijd nog gebaseerd op een formule. Ik heb een keer een progje gemaakt die de random waarden op een formulier tekende. Daar zag je duidelijk een partroon in. Maar zoals crisp hier boven al zei. de functie is random genoeg

Verwijderd

Math.random() genereerd een zgn. pseudo random reeks getallen. in andere programmeer talen kan je een zgn. seed initialiseren waardoor je constant dezelfde reeks pseudo-random getallen kan genereren. in actionscript heb je deze functie niet voor zover ik weet.

Verwijderd

Ik heb op zich niets meer toe te voegen, alleen nog dat het random genoeg is voor de meeste doeleinden aangezien het een formule betreft waarvan bijvoorbeeld een van de variabelen de tijd in miliseconden is. Op devedge van Netscape kun je waarschijnlijk wel meer info vinden als je geïnteresseerd bent :)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:41

crisp

Devver

Pixelated

Verwijderd schreef op 22 oktober 2002 @ 22:32:
Ik heb op zich niets meer toe te voegen, alleen nog dat het random genoeg is voor de meeste doeleinden aangezien het een formule betreft waarvan bijvoorbeeld een van de variabelen de tijd in miliseconden is. Op devedge van Netscape kun je waarschijnlijk wel meer info vinden als je geïnteresseerd bent :)
JS gebruikt altijd de tijd als seed voor Math.random()

Intentionally left blank


Verwijderd

crisp schreef op 22 oktober 2002 @ 22:39:
[...]

JS gebruikt altijd de tijd als seed voor Math.random()
Wow, dat herinner ik me nog van ongeveer mijn eerste programmatjes in basic :)
code:
1
10 RANDOMIZE TIMER

:)

Maar idd, computers kunnen geen random getal berekenen zover ik weet, het zijn bepaalde functies die aan de hand van een 'seed' en een indexnr het getal berekenen. Zo krijg je bij een bepaalde seed steeds dezelfde serie getallen, die op zich voor de meeste doeleinde geschikt is als random getal mbt de verdeling, de spreiding en de lage kans op regelmatige getallen (zelfs totaal random kunnen die voorkomen). Alleen voor superzware cryptografie schijnen ze wel es te regelmatig te kunnen zijn, maar waarschijnlijk ben je daar niet mee bezig :) Het enige wat belangrijk is is dat je seed steeds anders is, maar de tijd in seconden oid zou daarvoor vrij geschikt zijn.
Pagina: 1