+ 5 CALCOLO DELLA SEZIONE AUREA Φ 2 CON 10000 DECIMALI ... · 1 CALCOLO DELLA SEZIONE AUREA Φ = 2...

9

Click here to load reader

Transcript of + 5 CALCOLO DELLA SEZIONE AUREA Φ 2 CON 10000 DECIMALI ... · 1 CALCOLO DELLA SEZIONE AUREA Φ = 2...

Page 1: + 5 CALCOLO DELLA SEZIONE AUREA Φ 2 CON 10000 DECIMALI ... · 1 CALCOLO DELLA SEZIONE AUREA Φ = 2 1+ 5 CON 10000 DECIMALI ESATT1 DOPO LA VIRGOLA Cristiano Teodoro Sommario: la presente

1

CALCOLO DELLA SEZIONE AUREA Φ = 251+

CON 10000 DECIMALI ESATT1 DOPO LA VIRGOLA

Cristiano Teodoro

Sommario: la presente nota descrive il calcolo del valore numerico della Sezione Aurea con il numero desiderato di cifre esatte dopo la virgola, essendo tale grandezza. come è noto un numero irrazionale. Lo scopo puramente speculativo di questa “ récréation mathématique” è quello sostanzialmente di mettere in evidenza che anche su di un normale PC, disponendo di un semplice linguaggio software quale il Qbasic, è possibile trattare numeri costituiti anche da migliaia di cifre, effettuando su di essi con piena esattezza di calcolo tutte le operazioni aritmetiche richieste. Uno scopo pratico nel campo dell’informatica potrebbe essere quello di utilizzare il calcolo ed i valori ottenuti con migliaia di cifre esatte di tale numero irrazionale, quale BENCH MARK per valutare le prestazioni di precisione e di velocità di calcolo dei vari CPU esistenti sul mercato. ______________________ Nella letteratura tecnica, sia di tipo cartaceo che rintracciabili su diversi Siti Web, vi sono vari articoli e descrizioni riguardanti la Sezione Aurea (Golden Ratio) la cui formula matematica è la

seguente: 2

51+ che, espressa come numero decimale , viene indicata normalmente come segue:

1,6180339887498948……. dove con i puntini si vogliono indicare le ulteriori cifre decimali che si susseguono indefinitamente in modo random . In questa nota non parleremo di tale grandezza nei suoi vari aspetti, che spaziano sia nel campo della matematica e in particolare della geometria (si veda ad esempio l’articolo citato in [1] direttamente reperibile nel presente Sito), sia in quello della fisica [2] , sia anche in altri interessanti campi come illustrato in [SI1] e [SI2] , ma vogliamo soffermarci invece sul solo aspetto aritmetico cercando di portare i puntini sempre più a destra, calcolando cioè il suo valore numerico con un numero grande a piacere di decimali esatti dopo la virgola. esistono in verità nel web alcuni Siti, ad esempio [SI3], [SI4], che danno il valore numerico della Sezione Aurea o Golden Ratio, riportandolo anche con un gran numero di cifre esatte (1000, 10000 , 20000 e oltre), senza però illustrare e spiegare in dettaglio come tale valore sia stato calcolato e trovato. Vedremo invece qui di seguito quale algoritmo viene adottato e quali sono i principali passi da realizzare per ottenere quanto dichiarato utilizzando un normale PC. Nella formula della Sezione Aurea compare la radice quadrata del numero 5: 5 = 2,2360679..…, che è un numero irrazionale con una serie illimitata di cifre dopo la virgola. Il primo passo da fare è quindi quello di trovare il valore numerico di tale radice con tutte e sole le

cifre decimali richieste.

A tale proposito valgono le seguenti osservazioni:

se si calcola la seguente radice quadrata: 00000.......500000 , dove gli zeri che seguono la cifra 5

sono in numero pari, si ottiene un valore numerico costituito da una serie di cifre identiche a quelle

della semplice radice 5 ; l’unica differenza è nell’ordine di grandezza dei due numeri, vale a dire

Page 2: + 5 CALCOLO DELLA SEZIONE AUREA Φ 2 CON 10000 DECIMALI ... · 1 CALCOLO DELLA SEZIONE AUREA Φ = 2 1+ 5 CON 10000 DECIMALI ESATT1 DOPO LA VIRGOLA Cristiano Teodoro Sommario: la presente

2

nel posto assunto dalla virgola nella sequenza delle cifre.

Ebbene rifacendosi a quanto esposto in [3] riguardante il calcolo della parte intera della radice quadrata di un numero grande si possono calcolare tutte la cifre volute di 5 calcolando la parte intera di 0000000......5000000000 dove il numero 5 è seguito da un adeguato numero pari di 0. Si voglia e calcolare ad esempio 5 con 40 cifre esatte. Si deve prendere in considerazione il numero grande N = 50000000….00000 dove gli zeri sono 78. Eseguendo i calcoli come indicato sempre in [3 ] si trova il seguente valore numerico: N = 2236067977499789696409173668731176235440 (1) da cui si può ricavare immediatamente: 5 = 2,236067977499789696409173668731176235440 Ma perché 78 zeri ? Questo si desume constatando che:

500 = 22,360679 ……………… ha 2 cifre prima della virgola 50000 = 223,60679 ……….…, ha 3 cifre prima della virgola

5000000 = 2236,0679 ………., ha 4 cifre prima della virgola 500000000 = 2236,0679 ……., ha 5 cifre prima della virgola

e così via. Da questi esempi è facile allora ricavare che per ottenere x cifre intere esatte a sinistra della virgola occorre calcolare il valore di 0000000......5000000000 dove gli zeri che seguono la cifra 5 sono in numero di 2 ( )1−⋅ x . Pertanto per avere x = 40 cifre esatte prima della virgola si devono considerare ( )1402 −⋅ = 78 zeri Si ribadisce una volta ancora che, sia 5 , sia 0000000......5000000000 con un numero pari di zeri risultano avere lo stessa serie di cifre con l’unica differenza del posto della virgola. Se viene invece richiesto di calcolare 5 con y = 40 decimali esatti, cioè con 40 cifre esatte dopo la virgola, y è legato evidentemente al precedente valore x, che comprendeva anche la cifra iniziale 2, dalla seguente relazione: y = x -1. Pertanto per ottenere 5 con 40 decimali esatti dopo la virgola occorre introdurre un numero di zeri dopo la cifra 5 pari a 2*y = 80 ottenendo dopo alcune iterazioni il valore cercato. Si inserirà poi la virgola subito dopo la prima cifra.

Proseguendo nei calcoli, dato che si vuole individuare non solo 5 ma anche il valore 2

51+ ,

conviene procedere considerando la sequenza delle y+1 cifre esatte trovate (compresa quindi anche la prima) senza alcun inserimento per ora della virgola. Nel metodo usato lavorando in aritmetica a precisione multipla facendo riferimento ad esempio al valore N mostrato in (1) la serie di cifre esatte trovate per tale valore viene posizionata in un vettore (array) ordinato composto da un adeguato numero di elementi o celle . Consideriamo ora la cella di indice più elevato di questo vettore: in essa vengono memorizzate le prime c cifre più significative della suddetta serie con c variabile da 1 sino a 7 a seconda del numero di cifre decimali esatte che si vogliono ottenere. Siano ad esempio memorizzate nella suddetta cella le seguenti prime c = 6 cifre: 223606 Poiché in effetti dobbiamo avere a disposizione il valore 323606 che rappresenta, a meno della virgola, le prime c cifre di 1 + 5 si deve eseguire su questo primo elemento la seguente addizione 223606 + 110 −c ottenendo così il valore 323606. Su tutto il vettore poi così modificato si effettua quindi la divisione per 2 ottenendo un vettore-quoziente, il cui primo elemento contiene le seguenti cifre:1 61803 mentre gli altri elementi contengono, ciascuno composto da g cifre elementari (dove g

Page 3: + 5 CALCOLO DELLA SEZIONE AUREA Φ 2 CON 10000 DECIMALI ... · 1 CALCOLO DELLA SEZIONE AUREA Φ = 2 1+ 5 CON 10000 DECIMALI ESATT1 DOPO LA VIRGOLA Cristiano Teodoro Sommario: la presente

3

è l’esponente della aritmetica utilizzata in Base g10 [3]), tutte le rimanenti cifre di 2

51+ sempre

non considerando la virgola. Inserendo ora la virgola in modo semplice ma adeguato nella prima cella del vettore-quoziente, tale elemento assumerà la seguente configurazione: 1,61803 Quale risultato finale si ottiene, memorizzato nel vettore, il valore numerico cercato della Sezione Aurea con tutte la cifre decimali richieste. Pertanto sempre rifacendoci all’esempio sopra riportato, quale risultato finale dei calcoli si otterrà il valore la Sezione Aurea con 40 cifre esatte: 1.618033988749894848204586834365638117720. Si fa osservare che l’algoritmo di approssimazione usato per il calcolo della radice quadrata , quello di Newton -.Raphson (illustrato in una nota precedente [3] reperibile nella sezione Teoria dei numeri di questo Sito) presenta una convergenza di tipo quadratico, il che significa in termini pratici, che ad ogni iterazione il numero delle cifre esatte trovate è pressoché raddoppiato rispetto alla precedente iterazione. Partendo ad esempio con un valore iniziale per la radice quadrata presentante 14 cifre esatte, con la a1 iterazione si otterranno 142 ⋅ = 28 cifre esatte, con la a2 iterazione 282 ⋅ = 56 cifre esatte, con la terza iterazione 562 ⋅ = 112 cifre esatte e in generale nella an iterazione si otterranno

142 ⋅n cifre esatte. Per sapere così quante iterazioni sono necessarie per ottenere 1000 cifre esatte della radice di un numero si può impostare la seguente equazione 1000 = 142 ⋅n , da cui si ricava:

n = 2log

141000log

= 6,158429…….

Poiché però il numero di iterazioni non può essere che intero il valore di n sarà il seguente: n = ...158,6 = 7. In sole 7 iterazioni pertanto si riescono ad ottenere 1000 cifre esatte. In realtà poi si effettuano 8 iterazioni in quanto l’ultima è preposta alla verifica dell’effettivo numero di cifre esatte richieste. Si riportano qui di seguito 3 allegati. Nei primi due vengono mostrati, così come compaiono sullo schermo del monitor, due esempi del risultato di calcolo, relativi all’ottenimento del valore numerico della Sezione Aurea uno con 455 cifre esatte, l’altro con 2359 cifre esatte ottenuti tramite il programma riportato nel terzo Allegato . Sono messi in evidenza anche il numero di iterazioni richieste ed i tempi di calcolo. Nel terzo allegato viene riportato il listato del programma scritto in Qbasic, tramite il quale si possono ottenere i valori numerici della Sezione Aurea con un qualsiasi numero di decimali esatti nel campo da 15 a 11000 decimali . Si vuole qui specificare che il limite di 15 è dovuto per ottenere un valore esatto anche per la 16^ cifra della grandezza in esame ( il che non è ottenibile anche con la doppia precisione disponibile), mentre il limite superiore è suggerito dalle limitazioni imposte dal software utilizzato: andando oltre tale valore si possono avere possibili interruzioni di calcolo dovuti ad una eccessiva lunghezza delle stringhe numeriche impiegate nel programma. Si fa presente che il valore numerico della sezione aurea viene presentato per una migliore lettura con uno spazio ogni g cifre. Nei casi illustrati qui di seguito si ha g = 7. RIFERIMENTI [1] – G. Carolla, Il numero aureo sul Sito http://www.matematicamente.it/ - Approfondimenti [2] – M. R. Schroder, Number Theory in Science and Communication, Part X-30.1, Second Enlarged Edition, Springer-Verlag [3] – C. Teodoro, Nota sul Calcolo della parte intera della radice quadrata di un numero grande

Page 4: + 5 CALCOLO DELLA SEZIONE AUREA Φ 2 CON 10000 DECIMALI ... · 1 CALCOLO DELLA SEZIONE AUREA Φ = 2 1+ 5 CON 10000 DECIMALI ESATT1 DOPO LA VIRGOLA Cristiano Teodoro Sommario: la presente

4

http://www.matematicamente.it/ SITI INTERNET: [SI1] http://www.geocities.com/jyce3/ [SI2] http://goldennumber.net/math.htm [SI3] http://www.mcs.surrey.ac.uk/Personal/R.Knott/Fibonacci/phi.html [SI4] http://www.cs.arizona.edu/icon/oddsends/phi.htm 1° ESEMPIO Quante cifre decimali esatte vuoi dopo la virgola? 454 N = 5000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 000000000000000000000000000000000 cifre di N = 909 VALORE INIZIALE DI X: Xo = 22360679774997800000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000 cifre di Xo : 455 g = 7 pr = 10^g = 10000000 numero iterazioni: | 1 | 2 | 3 | 4 | 5 | 6 | SEZIONE AUREA : 1.618033 9887498 9484820 4586834 3656381 1772030 9179805 7628621 3544862 2705260 4628189 0244970 7207204 1893911 3748475 4088075 3868917 5212663 3862223 5369317 9318006 0766726 3544333 8908659 5939582 9056383 2266131 9928290 2678806 7520876 6892501 7116962 0703222 1043216 2695486 2629631 3614438 1497587 0122034 0805887 9544547 4924618 5695364 8644492 4104432 0771344 9470495 6584678 8509874 3394422 1254487 7066478 0915884 6074998 8712400 7652170 5751797 8834166 2562494 0758906 9704000 2812104 2762177 1117778 0531531 Il valore numerico della SEZIONE AUREA è stato calcolato con 454 cifre esatte dopo la virgola NUMERO DI ITERAZIONI: 6 tempo impiegato: .051 secondi

Page 5: + 5 CALCOLO DELLA SEZIONE AUREA Φ 2 CON 10000 DECIMALI ... · 1 CALCOLO DELLA SEZIONE AUREA Φ = 2 1+ 5 CON 10000 DECIMALI ESATT1 DOPO LA VIRGOLA Cristiano Teodoro Sommario: la presente

5

2° ESEMPIO g = 7; pr = 10000000 numero iterazioni: | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | SEZIONE AUREA : 1.618033 9887498 9484820 4586834 3656381 1772030 9179805 7628621 3544862 2705260 4628189 0244970 7207204 1893911 3748475 4088075 3868917 5212663 3862223 5369317 9318006 0766726 3544333 8908659 5939582 9056383 2266131 9928290 2678806 7520876 6892501 7116962 0703222 1043216 2695486 2629631 3614438 1497587 0122034 0805887 9544547 4924618 5695364 8644492 4104432 0771344 9470495 6584678 8509874 3394422 1254487 7066478 0915884 6074998 8712400 7652170 5751797 8834166 2562494 0758906 9704000 2812104 2762177 1117778 0531531 7141011 7046665 9914669 7987317 6135600 6708748 0710131 7952368 9427521 9484353 0567830 0228785 6997829 7783478 4587822 8911097 6250030 2696156 1700250 4643382 4377648 6102838 3126833 0372429 2675263 1165339 2473167 1112115 8818638 5133162 0384005 2221657 9128667 5294654 9068113 1715993 4323597 3494985 0904094 7621322 2981017 2610705 9611645 6299098 1629055 5208524 7903524 0602017 2799747 1753427 7759277 8625619 4320827 5051312 1815628 5512224 8093947 1234145 1702237 3580577 2786160 0868838 2952304 5926478 7801788 9921990 2707769 0389532 1968198 6151437 8031499 7411069 2608867 4296226 7575605 2317277 7520353 6139362 1076738 9376455 6060605 9216589 4667595 5190040 0555908 9502295 3094231 2482355 2122124 1544400 6470340 5657347 9766397 2394949 9465845 7887303 9623090 3750339 9385621 0242369 0251386 8041457 7995698 1224457 4717803 4173126 4532204 1639723 2134044 4494873 0231541 7676893 7521030 6873788 0344170 0939544 0962795 5898678 7232095 1242689 3557309 7045095 9568440 1755519 8819218 0206405 2905518 9349475 9260073 4852282 1010881 9464454 4222318 8913192 9468962 2002301 4437702 6992300 7803085 2611807 5451928 8770502 1096842 4936271 3592518 7607778 8466583 6150238 9134933 3312231 0533923 2136243 1926372 8910670 5033992 8226526 3556209 0297986 4247275 9772565 5086154 8754357 4826471 8141451 2700060 2389016 2077732 2449943 5308899 9095016 8032811 2194320 4819643 8767586 3314798 5719113 9781539 7807476 1507722 1175082 6945863 9320456 5209896 9855567 8141069 6837288 4058746 1033781 0544439 0943683 5835813 8113116 8993855 5769754 8414914 4534150 9129540 7005019 4775486 1630754 2264172 9394680 3673198 0586183 3918328 5991303 9607201 4455950 4497792 1207612 4785645 9161608 3705949 8786006 9701894 0988640 0764436 1709334 1727091 9143365 0137157 6601148 0381430 6262380 5143211 7348151 0055901 3456101 1800790 5063814 2152709 3085880 9287570 3450507 8081454 5881990 6336129 8279814 1174533 9273120 8092897 2792221 3298064 2946878 2427487 4017450 5540677 8757083 2373109 7591511 7762978 4432847 4790817 6518097 7872684 1611763 2503861 2112914 3683437 6702350 3711163 3072586 9883258 7103363 2223810 9809012 1101989 9176841 4917512 3313401 5273384 3837234 Il valore numerico della SEZIONE AUREA è stato calcolato con 2358 cifre esatte dopo la virgola NUMERO DI ITERAZIONI: 9 tempo impiegato: 2.53 secondi

Page 6: + 5 CALCOLO DELLA SEZIONE AUREA Φ 2 CON 10000 DECIMALI ... · 1 CALCOLO DELLA SEZIONE AUREA Φ = 2 1+ 5 CON 10000 DECIMALI ESATT1 DOPO LA VIRGOLA Cristiano Teodoro Sommario: la presente

6

LISTATO del PROGRAMMA in Qbasic per il calcolo della SEZIONE AUREA REM PROGRAMMA PER IL CALCOLO DELLLA SEZIONE AUREA (GOLDEN RATIO) DATA DAL REM VALORE NUMERICO (1 + SQR(5))/2 REM IL PROGRAMMA E' IN GRADO DI CALCOLARE TUTTE LE CIFRE DESIDERATE REM SINO AD UN MASSIMO DI 11000. CLS : DEFDBL A-Z: c$ = "5": 5 INPUT "Quante cifre decimali esatte vuoi dopo la virgola"; cv IF cv > 1.1 * 10 ^ 4 THEN PRINT "introdurre un valore non > 11000 ": GOTO 5 FOR k = 0 TO 2 * cv - 1: z$ = "0" + z$: NEXT k dn$ = c$ + z$: lc = LEN(dn$): PRINT "N ="; dn$: PRINT "lc ="; lc t1 = TIMER REM ------------------------------------------------------------------------- REM istruzioni per iniziare con il piu' appropriato valore di x l'algoritmo" REM di ricerca iterativa x=1/2(x+a/x) (Newton) PRINT ln = LEN(dn$): IF ln > 250 GOTO piudue lr = INT((ln + 1) / 2): lrr = lr: n = VAL(dn$): sq = SQR(n): PRINT "SQR(N) ="; sq; "valore dato dal computer" 'DO: y$ = INKEY$: LOOP WHILE y$ = "" sq$ = STR$(sq): y0 = lr - 14: y = y0: IF y < 0 THEN y = 0 rr = 14: IF lr < 14 THEN rr = lr xi$ = STR$(xi): lx = LEN(xi$) - 1: x0$ = RIGHT$(xi$, lx): IF y0 > 0 THEN z$ = STRING$(y0, "0"): GOTO ipsi piudue: dl = 250 IF INT(ln / 2) <> ln / 2 THEN dl = dl - 1 nn$ = LEFT$(dn$, dl): lnn = LEN(nn$): nn = VAL(nn$): sq = SQR(nn): sq$ = STR$(sq) lr = INT((ln + 1) / 2): lrr = lr y0 = 124 - 14: y = y0: ipsi: s1 = sq / (10 ^ y): xi = INT(s1) rr = 14: IF lr < 14 THEN rr = lr xi$ = STR$(xi): lx = LEN(xi$) - 1: x0$ = RIGHT$(xi$, lx): ' PRINT "x0$="; x0$ PRINT:REM ------------------------------------------------------------------- IF y0 > 0 THEN z$ = "0" PRINT : ' PRINT "z$="; z$, "lz ="; lz FOR k = 1 TO (lr - lx): x0$ = x0$ + z$: NEXT k PRINT "VALORE INIZIALE DI X:"; " Xo = "; x0$ lx = LEN(x0$): PRINT "cifre di Xo :"; lx 'DO: y$ = INKEY$: LOOP WHILE y$ = "" REM ---determinazione della migliore Base (Radix)di Numerazione :pr = 10^g -- mm = 0 a = lr - INT(lr / 5) * 5: IF a = 0 THEN a = 5: ' PRINT "++++ a ="; a b = lr - INT(lr / 6) * 6: IF b = 0 THEN b = 6: ' PRINT "++++ b ="; b c = lr - INT(lr / 7) * 7: IF c = 0 THEN c = 7: ' PRINT "++++ c ="; c mm = b: g = 6: IF a > b THEN mm = a: g = 5 IF mm <= c THEN mm = c: g = 7 IF lr < 8 THEN g = INT((lr + 1) / 2) pr = 10 ^ g: PRINT "g="; g; "pr="; pr 'g = 7: pr = 10 ^ g REM ------------------------------------------------------------------------ REM ---- conversione della stringa x0$ in numero in base: pr=10^g REM ---- detto numero sarà memorizzato nel vettore b(k) dr$ = x0$: ln = LEN(dn$): lr = LEN(dr$)

Page 7: + 5 CALCOLO DELLA SEZIONE AUREA Φ 2 CON 10000 DECIMALI ... · 1 CALCOLO DELLA SEZIONE AUREA Φ = 2 1+ 5 CON 10000 DECIMALI ESATT1 DOPO LA VIRGOLA Cristiano Teodoro Sommario: la presente

7

REM -------- messa in forma di N1: a(k)<--- N1 ------------------------- ln = LEN(dn$): ' PRINT "cifre di N1:"; ln cn = ln / g: g1 = INT(cn): IF cn = INT(cn) THEN g1 = cn - 1 DIM a(g1), r(g1), q(g1) r = ln + 1: IF ln <= g THEN a(0) = VAL(dn$): GOTO ennea FOR l = 0 TO g1 - 1: r = r - g: b$ = MID$(dn$, r, g): a(l) = VAL(b$): NEXT l b$ = LEFT$(dn$, r - 1): a(g1) = VAL(b$) ennea: ' PRINT "N1 ="; : FOR k = g1 TO 0 STEP -1: PRINT a(k); : NEXT k cn = g1 PRINT divis: 'PRINT "DIVISORE :" cr = lr / g: g2 = INT(cr): IF cr = INT(cr) THEN g2 = cr - 1 DIM b(g2 + 1), y(g2 + 1), z(g2) r = lr + 1: IF lr <= g THEN b(0) = VAL(dr$): y(0) = b(0): GOTO inizdiv IF cr = 0 THEN b(0) = VAL(dr$): PRINT b(0): y(0) = b(0): GOTO inizdiv FOR l = 0 TO g2 - 1: r = r - g: b$ = MID$(dr$, r, g): b(l) = VAL(b$): NEXT l b$ = LEFT$(dr$, r - 1): b(g2) = VAL(b$) 'IF c > 1 THEN b$(cr) = LEFT$(dr$, c - 1): b(cr) = VAL(b$(cr)): PRINT b(cr); FOR k = g2 TO 0 STEP -1: ' PRINT b(k); y(k) = b(k) NEXT k cr = g2 'PRINT "cr="; cr 'DO: y$ = INKEY$: LOOP WHILE y$ = "" PRINT : PRINT "numero iterazioni: |"; REM ========================================================================= REM --------- inizio ciclo iterativo : b=x0:y=0.5(b+a/b):b=y --------------- inizdiv: REM ----------------------DIVISIONE--------------------------------- REM --- si deve effettuare : 1/2(b+a/b) con b iniziale = x0 (a<--n$,b<--x0$) REM --- si esegue a/b in precisione multipla ottenendo il quoziente q posto REM --- nel vettore q(k) r = 0: m = m + 1: PRINT m; "|"; ' DO: y$ = INKEY$: LOOP WHILE y$ = "" FOR k = cn TO 0 STEP -1: r(k) = a(k): NEXT k d = b(cr) + 1 FOR h = cn TO cr + 1 STEP -1: a = r(h): sv = cr IF a < d THEN a = r(h) * pr + r(h - 1): sv = cr + 1 q = INT(a / d): q(h - sv) = q(h - sv) + q: ' PRINT "q("; h - sv; ")="; q(h - sv) FOR k = 0 TO cr x = q * b(k) + r: r = INT(x / pr): z = x - r * pr s = k + h - sv IF z > r(s) THEN r(s) = pr + r(s): r(s + 1) = r(s + 1) - 1 r(s) = r(s) - z NEXT k r(h) = r(h) - r: ' PRINT "r("; h; ")="; r(h) r = 0 IF r(h) <> 0 THEN h = h + 1 'DO: y$ = INKEY$: LOOP WHILE y$ = "" NEXT h REM ------ controllo sul resto r della divisione ------------------------- REM ------ r puo' essere ancora > di b : si va a "continua" REM ------ se r < b, r risulta gia' essere l'effettivo resto: si va a "resto" trovar: FOR j = cr TO 0 STEP -1 IF r(j) < b(j) THEN j = 0: GOTO resto IF r(j) > b(j) THEN j = 0: GOTO continua NEXT j

Page 8: + 5 CALCOLO DELLA SEZIONE AUREA Φ 2 CON 10000 DECIMALI ... · 1 CALCOLO DELLA SEZIONE AUREA Φ = 2 1+ 5 CON 10000 DECIMALI ESATT1 DOPO LA VIRGOLA Cristiano Teodoro Sommario: la presente

8

continua: r = 0: d = b(cr) + 1 IF r(cr) = b(cr) THEN d = b(cr) q = INT(r(cr) / d): q(0) = q(0) + q FOR j = 0 TO cr x = q * b(j) + r: r = INT(x / pr): z = x - r * pr IF z > r(j) THEN r(j) = pr + r(j): r(j + 1) = r(j + 1) - 1 r(j) = r(j) - z NEXT j IF r(cr) > 0 GOTO trovar resto: ' PRINT "------------------------": PRINT "RESTO :"; FOR j = cr TO 0 STEP -1 IF r(j) > 0 THEN j1 = j: j = 0 NEXT j cc = cn - cr: IF q(cc) = 0 THEN cc = cc - 1 rs = 0 'PRINT : PRINT "QUOZIENTE :"; FOR k = 0 TO cc: x = q(k) + rs: rs = INT(x / pr): q(k) = x - rs * pr: NEXT k IF rs > 0 THEN cc = cc + 1: q(cc) = rs REM --- ho trovato a/b ---> q(k); devo eseguire ora (b+a/b),cioe' sommare fra REM --- loro i due vettori b(k) e q(k) [ b(cr) , q(cc)] ri = 0 FOR k = 0 TO cr: w = b(k) + q(k) + ri: ri = INT(w / pr): b(k) = w - ri * pr NEXT k IF ri > 0 THEN cr = cr + 1: b(cr) = ri rs = 0 FOR h = 0 TO cr: v = b(h) * pr / 2 + rs: rs = INT(v / pr): b(h) = v - rs * pr: ' PRINT b(h); NEXT h IF rs > 0 THEN cr = cr + 1: b(cr) = rs FOR k = 1 TO cr: b(k - 1) = b(k): NEXT k b(cr) = 0: cr = cr - 1 'DO: y$ = INKEY$: LOOP WHILE y$ = "" FOR k = 0 TO cc: q(k) = 0: NEXT k cc = 0 FOR k = cr TO 1 STEP -1 IF y(k) <> b(k) GOTO reitera NEXT k IF y(0) = b(0) GOTO radice IF y(0) <> b(0) - 1 GOTO reitera GOTO radice reitera:FOR k = cr TO 0 STEP -1: y(k) = b(k): NEXT k zz = zz + 1: ' PRINT "zz="; zz 'DO: y$ = INKEY$: LOOP WHILE y$ = "" GOTO inizdiv REM ------------------------------------------------------------------------ radice: y$ = STR$(y(cr)) ly = LEN(y$) yy = INT(y(cr) / 10 ^ (g - 1)) PRINT : ' PRINT : PRINT y$, ly, yy y(cr) = y(cr) + 10 ^ (ly - 2) 'PRINT y(cr) b(cr) = y(cr) rs = 0 FOR h = 0 TO cr: v = b(h) * pr / 2 + rs: rs = INT(v / pr): b(h) = v - rs * pr: ' PRINT b(h); NEXT h IF rs > 0 THEN cr = cr + 1: b(cr) = rs FOR k = 1 TO cr: b(k - 1) = b(k): NEXT k b(cr) = 0: cr = cr – 1

Page 9: + 5 CALCOLO DELLA SEZIONE AUREA Φ 2 CON 10000 DECIMALI ... · 1 CALCOLO DELLA SEZIONE AUREA Φ = 2 1+ 5 CON 10000 DECIMALI ESATT1 DOPO LA VIRGOLA Cristiano Teodoro Sommario: la presente

9

FOR k = cr TO 0 STEP -1: y(k) = b(k): ' PRINT b(k); NEXT k 111 PRINT : PRINT " SEZIONE AUREA :" yy$ = STR$(y(cr)): ly = LEN(yy$): y1$ = MID$(yy$, 2, 1) v$ = ".": y2$ = RIGHT$(yy$, ly - 2) ay$ = y1$ + v$ + y2$ lay = LEN(ay$) f$ = ay$: lv = LEN(f$) - 2 PRINT FOR k = 0 TO cc: q(k) = 0: NEXT k 'fine: ' PRINT : PRINT "tempo impiegato:"; TIMER - t1 lff = LEN(f$): ' PRINT "lff ="; lff zz$ = "0": a$ = " " yy$ = "": cc$ = ay$: l2 = LEN(cc$) - 1: rr$ = RIGHT$(cc$, l2): ss = g - l2: yy$ = STRING$(ss, a$): b$ = yy$ + rr$: 'PRINT "yy$="; yy$, b$ PRINT ay$; SPC(1); FOR k = cr - 1 TO 0 STEP -1 y$ = "": c$ = STR$(y(k)): la = LEN(c$) - 1: r$ = RIGHT$(c$, la) s = g - la: IF s = 0 THEN b$ = y$ + r$: GOTO 90 y$ = STRING$(s, zz$): b$ = y$ + r$ 90 PRINT b$; SPC(1); NEXT k ce = cr * g + lay - 1 PRINT : PRINT : PRINT "Il valore numerico della SEZIONE AUREA " PRINT "è stato calcolato con"; ce; "cifre esatte dopo la virgola" PRINT "NUMERO DI ITERAZIONI:"; m PRINT : PRINT "tempo impiegato:"; TIMER - t1; "secondi" END