Kio estas hazarda entjero? Ĉu hazarde prenita entjero inter 1 kaj 1000000 estas vere reprezentiva de iu ajn hazarda entjero? Oni rimarkas tre rapide ke nia modelado nur proksimiĝas de la ideala modelo. En ordo, ja pri la maniero generi la hazardan nombron ke ni realigos kelkajn ŝanĝojn... Ne ne uzos plu la primitivon hazardon sed uzos la sekvencon de la decimaloj de π. Mi klarigu: la decimaloj de π de ĉiam intrigis la matematikistojn pro ilia manko de reguleco; la ciferoj de 0 ĝis 9 ŝajnas aperi laŭ kvantoj preskaŭ egalaj kaj laŭ hazarda maniero. Ni vidos tuj kiel generi hazaradan nombron per decimaloj de π. Antaŭ ĉio, necesos kolekti la unuajn decimalojn de π (ekzeple unu milionon).
http://downloads.tuxfamily.org/xlogo/common/millionpi.txt |
Por krei niajn hazardajn nombrojn, ni prenu pakojn de 8 ciferojn el la sekvenco de decimaloj de π. Por klarigo, la dosiero komenciĝas tiel:
Unua nombro
Dua nombro
Tria nombro338327950288419716939
ktp
Mi forigu la «.» de 3.14... kiu ĝenos kiam oni grupigos la decimalojn. Ĉio en ordo, ni kreu novan proceduron nomatan hazardpi kaj modifu malmulte la proceduron test:
por pgkd :a :b se (rest :a :b) = 0 [sendu :b] [sendu pgkd :b rest :a :b] fino por test :provoj # Malfermu flukson indikatan de la cifero 1 al la dosiero millionpi.txt # (ĉi tie, supozate ke ĝi estas en la kuranta dosierujo; # se ne, uzu dosieron_provizu kaj absolutan vojon) flukson_malfermu 1 "millionpi.txt # Provizu al la variablo linio la unuan linion de la dosiero millionpi.txt provizu "linio unuan flukslinion_legu 1 # Komencu la variablon nombrilo je 0 provizu "nombrilo 0 ripetu :provoj [se 1 = pgkd hazardpi 7 hazardpi 7 [provizu "nombrilo :nombrilo + 1]] # Kalkulu la frekvencon provizu "f :nombrilo / :provoj # Skribu la valoron proksimuman al pi skribu frazon [proksimumigo de pi:] radiko (6/:f) flukson_fermu 1 fino por hazardpi :n lokp "nombre " ripetu :n [# Se estas plu neniu signo sur la linio se 0 = kmpt :linio [provizu "linio unuan flukslinion_legu 1] # Provizu la variablon signo per la valoro de la unua signo de la linio provizu "signo unuan :linio # poste oni forigu tiun unuan signon de la linio provizu "linio senunuan :linio provizu "nombro vorton :nombro :signo] sendu :nombro fino test 10 proksimumigo de pi: 3.4641016151377544 test 100 proksimumigo de pi: 3.1108550841912757 test 1000 proksimumigo de pi: 3.081180112566604 test 10000 proksimumigo de pi: 3.1403714651066386 test 70000 proksimumigo de pi: 3.1361767950325627 |
Oni trovas do proksimumigon de la nombro π per ĝiaj propraj decimaloj!
Ankoraŭ eblas plibonigi tiun programon indikante ekzemple la tempon uzitan por la kalkulo. Aldonu en unua linio de la proceduro test:
provizu "komenco tempon
Aldonu ĝuste antaŭ flukson_fermu 1:
skribu frazon [Tempo uzita: ] tempon - :komenco