Jump to content
php.lv forumi

kā dators rada nejaušību?


seetnieks_uz_lapu_kaudzes

Recommended Posts

īstenībā parastais dators to nevar izdomāt! Ir dzirdēts, ka kvantu datori to spēšot! Cik man ir nojausma, tad viss ir saistīts ar laiku, jo reāli katrs pieprasījums tiek pieprasīts laikam noteiktā brīdī, kas var tikt uzskatīts par random skaitli! Bet precīzu atbildi nespēšu sniegt :(

Link to comment
Share on other sites

Man gan liekas ka tur ir iepitas taktis un laiks, bet neesmu parliecinats.

 

http://mit.edu/answers/c/c_random_numbers.html

Edited by cucumber
Link to comment
Share on other sites

vispar jau randoms tikai nosaciiti ir randoms ;)

jo vecakaas PHP versijaas randomaizeris bija japalaizj... tiiri teoretiski ja to nedariitu karu reizi buutu vieni un tie pashi skaitlji....

(kautkaads izejoskais / sakuma skaitlis kas visu laiku buutu vienaads lidzarto arii pirmie rezultaati buutu prognozejami...)

inizcalizacija notiek peec iekseeja servera pulkstenja (laika) ....

kas protams katru reizi ir cits..... taatad arii rez buus dazaads....

Link to comment
Share on other sites

  • 2 weeks later...
(starp citu, vai tas neizklausās mazliet absurdi - aprēķināt nejaušību? :)

Tāpēc jau datora "randomu" sauc par pseido-randomu. Īstu randomu datorā dabūt tikai no piesprausta ārējas iekārtas, kas, piemēram, ķer radio-viļņus un pārveido tās digitālā formātā. Viss pārējais ir izrēķināts randoms.

 

Vienkāršs un tipisks datora randoms ir linear congruential (netulkošu latviski) ģenerators. Tas sastāv no seeda (globāla stāvokļa) un formulas. Piemēram.

X(n+1) = (1664525*X(n) + 1013904223) mod 2^32.

Var redzēt, ka par seedu kalpo pats outputs.

Izvēloties vienu konkrētu sākuma seedu visi randomi kritīs fiksētā secībā. Piemēram, ja X0 = 0, tad:

1013904223, 1196435762, 3519870697, 2868466484, 1649599747, 2670642822, 1476291629, 2748932008, 2180890343, 2498801434.

Šie skaitļi izskatās pietiekoši randomiski.

Šī linear congruential ģeneratora periods ir ar kārtu 2^32. Tas nozīmē, ka paies tikai pēc ~2^32 izkritušajiem skaitļiem tie sāks atkārtoties.

Acīmredzami, ja X(i) = X(j), tad X(i+1) = X(j+1).

 

Daudz labāks randoma ģenerators ir Mersenne twister. Tā periods ir 2^19937 - 1 (šausmīgi gigantisks skaitlis - daudz daudz lielāks pat par visuma vecumu gados). Un tas ir arī ļoti ātrs.

Link to comment
Share on other sites

...bez atkārtojuma bezgalīgi ilgi...

Manuprāt, tad tā vairs nebūs random skaitļu ģenerēšana. Jo teorētiski, ģenerējot random skaitļus, var uzkrist arī vienāds skaitlis 10 reizes pēc kārtas.

 

Īstu randomu datorā dabūt tikai no piesprausta ārējas iekārtas, kas, piemēram, ķer radio-viļņus un pārveido tās digitālā formātā.

http://en.wikipedia.org/wiki/Urandom

Link to comment
Share on other sites

vai dators (kaut vai teorētiski) spēj ģenerēt skaitļus bez atkārtojuma bezgalīgi ilgi (daudz)?

Jā: X(n+1) = X(n)+1. Tik tas nebūs bezgalīgi ilgi (skat nākamo rindiņu). Tas būs tikai bez atkārtojuma.

 

vai dators prot būt bezgalīgs [kādā no savām izpausmēm]?

Tikai kautkādā ciklā, kā Grey_Wolf saka - mūžīgā ciklā. Datus tas nevar izdot ārā bezgalīgi, jo atmiņas daudzums ir limitēts.

Link to comment
Share on other sites

nu bezgaliigs proces jau vispar dabaa nevar ekssisteet ;)

Laika ass ir bezgalīga.

 

Ja es nekļūdos, vai gaījumā kvantu datori nebūs mūžīgi un ar relatīvas `bezgalības` opciju.

Visums jau pats par sevi ir viens liels randoms - N-tās zvaigznes un to paveidi rada (elektro)magnētiskos trokšņus, tādējādi iegūstot principā vienu bezgalīgu garu random-skaitli konkrētā laika punktā, ja pieņem, ka starojuma minimalā daļa atbilst 1 (0, ja konkrētā daliņa nav konkrētā vietā [kosmiskais tukšums ?]), un tas viss uz bezgalīgas laika ass.

Link to comment
Share on other sites

×
×
  • Create New...