SBC6502 - 44 - výpočet čísla Pi. Number Pi and its calculation on SBC6502.

By Administrator at December 06, 2020 12:45
Filed Under: SBC6502

 

Poďme v histórii zase o pekných pár rokov naspäť a pozrieme sa na to ako sa dalo vypočítať číslo {\displaystyle \pi \,\!} (inak ho poznáme tiež ako Ludolfovo číslo) na pekných pár čísiel za desatinnou bodkou, napríklad na celkové číslo 100. To je už celkom dosť - teda na nejaké to domáce použitie by to malo stačiť ... Smile

 

Vlastný program (je iba mierne upravený aby fungoval v prostredí SBC6502), program som iba "zdrcol" na dĺžku, pretože ak je viacej príkazov v jednom riadku - potom výpočet prebieha o pár % rýchlejšie (v riadku 20 premenná N určuje počet platných číslic pri výpočte čísla {\displaystyle \pi \,\!}, počet čísel za desatinnou bodku = N-1):


10 REM ADOPTED FROM COMMODORE BASIC
11 REM number Pi - line 12 - special for SBC6502
12 ? CHR$(12):POKE 15,80:REM IGI 2020
20 N=100: REM N MAY BE INCREASED, BUT WILL SLOW EXECUTION
30 LN=INT(10*N/3)+16:ND=1:DIM A(LN):N9=0
70 PD=0:REM FIRST PRE-DIGIT IS A 0
90 FOR J=1 TO LN:A(J-1)=2:NEXT J
130 FOR J=1 TO N:Q = 0:FOR I=LN TO 1 STEP -1
160 X=10*A(I-1) + Q*I:A(I-1)=X-(2*I-1)*INT(X/(2*I-1))
180 Q=INT(X/(2*I - 1)):NEXT I
200 A(0)=Q-10*INT(Q/10):Q=INT(Q/10):IF Q=9 THEN N9=N9+1:GOTO 450
240 IF Q<>10 THEN GOTO 350
260 D=PD+1:GOSUB 500:IF N9<=0 THEN GOTO 320
280 FOR K=1 TO N9:D=0:GOSUB 500:NEXT K
310 REM END IF
320 PD=0:N9=0:GOTO 450:REM Q <> 10
350 D=PD:GOSUB 500:PD=Q:IF N9=0 THEN GOTO 450
380 FOR K=1 TO N9:D=9:GOSUB 500:NEXT K:N9=0
450 NEXT J:? PD:END
490 REM OUTPUT DIGITS
500 IF ND=0 THEN ? D;:RETURN
510 IF D=0 THEN RETURN
520 ? D;".";:ND=0:RETURN

Poznámka:

Riadok číslo 12 je špecifický pre SBC6502, pri použití programu na iný typ počítača ho proste vynecháte. Robí len ekvivalent príkazu CLS a nastaví výstup na 80 znakov v riadku.

 

Rýchlosť výpočtu na 100 platných miest trvá dosť dlho, ale aj tak - ak si predstavím že sa toto kedysi počítalo ručne ... a zase na druhú stranu, v roku 1977 PC ešte neexistovalo, takže domácim nadšencom rozhodne museli stačiť 8-bity, nič iné k dispozícii nebolo.

 

Na záver uvádzam zdroj z ktorého som čerpal (program pre výpočet  čísla {\displaystyle \pi \,\!} je tam uverejnený pre viacero 8 bitových počítačov):

https://rosettacode.org/wiki/Pi

___________________________________________________________

Čo hovorí wikipedia - vyčíslenie hodnoty {\displaystyle \pi \,\!} :

 

William Shanks v roku 1853 oznámil, že vypočítal {\displaystyle \pi \,\!} s presnosťou na 607 miest (napokon sa ukázalo, že správnych bolo len 527). V súčasnosti sa snaha o upresnenie desatinného rozvoja čísla {\displaystyle \pi \,\!} urýchlila vďaka výpočtovej technike. V roku 1949 určili hodnotu čísla {\displaystyle \pi \,\!} s presnosťou na 2 037 desatinných miest, čo pomocou počítača ENIAC trvalo 70 hodín. V roku 2011 bolo známych viac ako 10 000 000 000 000 miest čísla {\displaystyle \pi \,\!}.


Počítač ENIAC (Electronic Numerical Integrator And Computer), dokončený 1946 - obsahoval 17 468 elektrónok, 7 200 diód, 1 500 relé, 70 000 rezistorov, 10 000 kondenzátorov, okolo 5 miliónov ručne spájkovaných spojov, vážil 30 ton, zaberal cez 60m³ (2,6 m × 0,9 m × 26 m), spotrebovával 150 kW elektrickej energie a jeho vývoj stál 500 000 dolárov. V prevádzke ho chladili 2 letecké motory.

(Koniec 1. citátu.)


Na rôznych internetových stránkach sa vyskytuje omnoho viac číslic čísla {\displaystyle \pi \,\!}. Dňa 14.03.2019 Emma Harukaová Iwaová predstavila hodnotu {\displaystyle \pi \,\!} spočítanú na 31.416 biliónov desatinných miest. Výpočet trval 121 dní na 25 počítačoch. Tento počin je zapísaný v Guinnessovej knihe rekordov. Aj keď  bolo {\displaystyle \pi \,\!} spočítané na viac ako bilión (1012) číslic, v aplikovanej matematike sa väčšinou používa zaokrúhlenie iba na niekoľko desiatok desatinných miest. Pritom 11 desatinných miest čísla {\displaystyle \pi \,\!} napríklad stačí na odhad dľžky kružnice, ktorá je veľká ako Zem a to s chybou menšou ako jeden milimeter a 39 desatinných miest stačí na akúkoľvek predstaviteľnú aplikáciu. NASA v svojich výpočtoch používa 15 desatinných miest.

(Koniec 2. citátu.)


Pretože {\displaystyle \pi \,\!} je iracionálne číslo, číslice v jeho desatinnom rozvoji sa nikdy nezačnú opakovať. Sled týchto číslic fascinuje matematikov a tiež aj laikov a počas posledných pár storočí sa vkladajú snahy do vypočítania viac číslic {\displaystyle \pi \,\!} a skúmajú sa potom jeho vlastnosti. Zatiaľ sa ale nepodarilo nájsť žiaden vzor podľa ktorého by sa číslice opakovali.
(Koniec 3. citátu.)

 

Poznámka:

Počítač ENIAC rozmermi vraj zaberal stredne veľký byt. Tie letecké motory mali výkon určite cez stovky kWh, čiže aj toto by sa patrilo prirátať k spotrebe počítača. Keďže to bolo v USA tak ich samotná kuchyňa je svojimi rozmermi celý náš byt - takže výsledné rozmery sa nám javia o niečo väčšie v našich pomeroch než ako to asi vidia v USA. A mať v spálni letecké motory ...


Laughing Laughing Laughing

 

Realita na SBC6502:


Tak som pustil na 4MHz verzii SBC6502 výpočet čísla {\displaystyle \pi \,\!} na platných 2038 miest (riadok 20 N=2038), t.j. bude platných 2037 desatinných miest (čiže kopírujem výpočet ENIACu) - zbehlo to za 38 hodín a 12 minút. (Ak bude procesor 65C02 bežať na 6MHz tak to zbehne za 1528 minút, alebo slušnejšie preložené do zrozumiteľnejšej formy bude výpočet hotový za 25hodín a 28minút.)

 

Ak zoberiem do úvahy že ENIAC sa dal naprogramovať (konkrétne "predrátkovať" na konkrétnu úlohu a vlastne bežal vo svojom natívnom strojovom kóde) a zvládol to za 70 hodín a mne to bežalo v Basicu na počítači ktorý vznikol o cca 30 rokov neskôr (1977) - tak je to slušný posun v rýchlosti výpočtu. Prepočítavalo mi to 53.375 čísla za hodinu - teda pri nastavení na uvedené konkrétne číslo 2038. Ak je číslo menšie tak doba prepočtu sa úmerne skracuje, t.j. výpočet zbehne rýchlejšie. Ak by to bolo naprogramované v strojovom kóde tak by rýchlosť výpočtu bola minimálne o 2 rády vyššia. Je jasné že výpočtom prekračujeme napr. presnosť NASA celkom o dosť veľkú hodnotu, pre nás je zaujímavé že tak veľkú presnosť dostaneme na 8-bite.

 

A koľko to trvá na 100 miest na Vašom 8-bitovom počítači  ? - tak to si musíte vyskúšať sami.

Čas výpočtu 100 miest na 4MHz SBC6502 - 5min.38sec., na 6MHz je to potom úmerne kratšie (o 1/3).

Ak dám výpočet na postačujúcich 10 platných čísel - zbehne za 5.38sec, pre 15 číslic trvá výpočet 10.29sec., (uvedené časy platia pre x-tal = 4MHz)


Takže - ak chcete ešte pred týmito Vianocami niečím slušne prevetrať registre a zásobník Vášho procesoru - máte možnosť.

____________________________________________________________

Návrat do všetkých pokračovaní o SBC6502:

http://blog.3b2.sk/igi/post/SBC6502-0-UvodIntroduction.aspx

_____________________________________________________

Vaše hodnotenie, Rate post

Comments

12/6/2020 12:48:58 PM #

trackback

Directory SBC6502

Directory SBC6502

Igi blog |

12/8/2020 4:01:12 AM #

VanThomas

Dík za hezký kousek Basicu. Zrovna mám na stole IQ-151, tak jsem to zkusil na něm. Rychlost je nesrovnatelná, oranžová příšera se i s těmi 100 místy moří skoro hodinu... (Basic-G a samozřejmě 8080 na 2 MHZ).
P.S. Na řádku 350 chybí dvojtečka.

VanThomas Czech Republic |

12/8/2020 2:07:02 PM #

Admin

Vďaka za komentár a upozornenie na chybu. Riadok 350 opravený.

Admin Slovakia |

12/14/2020 12:51:20 AM #

wait-state

Otestované pre N=100 na NCB85v2 (8085 + xtal 10.24MHz) s Microsoft MBASIC.
výsledok : 12min 47sec




wait-state Slovakia |

12/14/2020 9:56:55 AM #

Admin

Je naozaj zaujímavé aké rozdielne údaje vyliezajú z jednotlivých počítačov, vďaka za info.

Admin Slovakia |

Comments are closed

Info o autorovi

Volám sa Igor Gramblička, bydlisko: Bratislava, Slovakia. Môj nick: Igi. Blog je o mojich záujmoch - som už na dôchodku, predtým som pracoval ako IT špecialista na počítačové siete a redakčné systémy vo viacerých denníkoch - až som pred rokmi nakoniec zakotvil v jednom denníku kde som to potiahol až do konca mojej profesnej kariéry.