Sly și chineză aleatoare sau „legea conservării masei nu a fost anulat», savepearlharbor

Toate imaginile (imagine) a făcut în Paint'e.

De exemplu, float / standard double aleator în intervalul de la 0 la 1 (în cazul nostru, 1 nu este inclusă în setul, deoarece generează fracție). De asemenea, avem la dispoziție un set de numere întregi. Deci În matematică, vă puteți întinde pur și simplu de multiplicare. Dar, în realitate, computerul este mai bine să nu facă acest lucru, și pentru a genera secvența densă ca atare. Cum de a face acest lucru? Corectați: pentru a genera cel puțin două numere aleatoare. Concluzia este că vom acoperi toate precizii posibile la generarea de numere aleatoare în intervalul (în acest caz, de la 0 la N).

Standard aleatoriu. Precizia așa cum este ea.
aleator = aleator ()

Dual aleatoare. Nimeni nu știe, dar dăunează numai acuratețea generală a numerelor aleatoare.
aleator = aleator () * 2.0

Chineză dublu aleatoare. Nu dăunează exactitatea sau prejudiciul nu este puternic.
aleator = aleator ()> 0,5. aleatoare (). aleatoare () + 1,0

Un pic mai profesionist. Concluzia este că generează un număr întreg separat și o parte fracționată. Ca un frate chinez, nu afectează precizia.
aleator = etaj (aleator () * some_integer) + aleator ()

Care-i problema? Faptul este că, în primul caz, pur și simplu „se întinde“ probabilitatea (* și /). În acest caz, pericolul pentru valori foarte mari, care afectează grav precizia. In alte cazuri, precizia este generat pentru o parte fracționată și întreg. Este posibil să se schimbe pur și simplu (operare + și -) și cultură (max, min, clemă). Puteți încerca, de asemenea, pentru a stoarce diviziune. Dar înmulțirea întindere de secvență mai bine într-un vârf de cuțit.

ilustrare

El a adus imagine mai vie. Două sau una oarecare: vă decideți.

I-am dat o scurtă explicație a preciziei de numere aleatoare. În cazul în care performanța nu contează, este mai bine să nu pentru a trage, și se toarnă.