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).
- Ekzistas malgrandaj programoj kiuj faras tion tre bone. Mi konsilas PiFast por Vindozo kaj ScnhellPi
por Linukso.
- Pluku tiun dosieron de la retpaĝaro de XLOGO:
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