In occasione dell'upgrade della piattaforma di Scratch alla versione 3 tutti i progetti salvati nel sito del MIT nella versione 2 sono stati riscritti con la nuova versione 3.
Non tutti i progetti ne hanno ricevuto un beneficio in quanto, almeno per ora (marzo 2019) alcune funzioni non svolgono lo stesso lavoro di prima.
Mentre le applicazioni riguardanti narrazioni e storytelling si avvantaggiano di numerose innovazioni sui suoni e sulla grafica e la nuova versione è aperta a numerose estensioni molto interessanti permettendo un rapido interfacciamento con diverse apparecchiature hardware, la parte più collegata alle applicazioni matematico-scientifiche ne viene un po' mortificata o, perlomento, costringe gli autori a rivedere i propri progetti per restituire le funzionalità originali.
Un'applicazione utile allo studio delle proprietà numeriche del computer è quella che riguarda la ricerca del limite del rapporto sin x/x per x che tende a zero utilizzato in questo sito per approssimare numericamente il risultato notevole noto analiticamente.
Mentre la versione 2 al diminuire del valore dell'argomento x (in radianti ved nota 2) porta il limite a 1 senza incertezze, la versione 3 non si comporta allo stesso modo: la versione 3 fornisce il valore 1 per valori di x piccoli ma se si diminuisce x ulteriormente, si osservano valori non più accettabili.
Per scoprire le differenze è stato approntato lo stesso progetto nelle due versioni nelle quali si inserisce un angolo iniziale di 90°, viene quindi calcolato il valore del seno e, infine, il valore del rapporto sinx/x (nota 2).
Premendo il [tasto C], si divide l'angolo x per 10 e si vede come si modificano i valori, se si tiene anche il[tasto A] premuto la divisione avviene per 10^10.
Quando la divisione per 10 viene ripetuta molte volte si deve vedere l'argomento diminuire a valori molto piccoli senza che vadano perse le cifre significative.
Ogni numero è presentato in formati diversi per poter osservare cosa accade a tutte le cifre significative ed al valore stesso.
Se il valore della variabile viene moltiplicato per 10^18 si vedono tutte le sue cifre significative ed anche due di troppo perché la capacità dei registri numerici non supera le 16 cifre significative decimali (vedi ed anche "Abaluth") (nota 3).
In questo modo si possono osservare come i valori si trasformano quando sono divisi per grandi potenze di dieci.
Si prende in considerazione il progetto scritto con la versione 2 (da scaricare e poi aprire) realizzato con argomento in gradi
All'inizio i valori sono i seguenti:
x=90, che è il valore di partenza x0 preimpostato
exp =0 è il valore dell'esponente del 10 che è il moltiplicatore del numero base x0
si vede anche la stessa variabile moltiplictata per 10^18 che vale "x*10^18"= 90.000.000.000.000.000.000
il valore significativo dell'argomento (nota 1) è x= 90
il primo valore del seno è sin x= 1 (come ci si aspetta dato che l'argomento è in gradi)
si calcola quindi il rapporto
"sin x/x" = 0,011111
Con l'argomento in radianti il rapporto è indicatao dalla variabile
"sin x/x modif" = 0,63662 (nota 2)
Ovviamente si è lontani dai piccoli angoli per cui non si osserva il valore limite cercato.
Premendo <tasto c> si divide per 10 ed i valori cambiano:
x=9,
"x*10^18"= 9.000.000.000.000.000.000
x valore significativo = 90, deve rimanere così
sin x= 0,156434
sin x/x = 0,017382
sin x/x modif= 0,995893
Si vede già che il rapporto "sin x/x rad" si sta avvicinando a 1
Alla quarta iterazione, con angolo di 0.09°, il rapporto "sin x/x modif" vale 1 entro le cifre significative del visore di Scratch2.
La variabile "sin x/x modif *10^18" fa vedere tutte le cifre significative e si vede che non è proprio "1"ma ci va molto vicino.
Si può continuare a premere [tasto C] diverse volte per constatare che "sin x/x modif *10^18"si avvicina sempre di più all'unità.
Fino a quando si può continuare?
Alla 26^ iterazione i valori di x e di sin x sono diventati nulli anche guardando tutte le cifre significative ma il rapporto rimane visibile in tutte le cifre significative appena calcolate.
E poi?
Basta provare aiutandosi con [tasto A] tenuto premuto quando si preme [tasto C] in modo da procedere con esponenti che crescono in valore assoluto di 10 alla volta.
I valori rimangono pressoché invariati fino alla iterazione 308 quando exp = -308.
All'iterazione successiva i valori significativi diventano "infinity" e poco dopo il valore di "sin x/x modif *10^18" comincia a subire variazioni sui valori decimali più piccoli: siamo arrivati alla capacità massima di Scratch di manipolare numeri molto piccoli, meno di così non ce la fa.
Siamo entrati nel campo delle convenzioni su come trattare i numeri macchina.
La stessa procedura si può condurre con la versione 3 (leggermente modificata rispetto alla versione 2 per mettere in evidenza il alore dell'angolo in radianti x(rad).
Già alla prima iterazioni si vede che sin x ha molte meno cifre significative: 9 contro le 17 della versione 2.
Alla terza iterazione, il valore di "sin x/x modif" vale 1 sul visore ... bene!
Alla quinta iterazione diventa maggiore di 1 seppur di poco, poi diventa erratico ed alla 11^ iterazione diventa nullo, come nullo è diventato il valore di sin x.
La versione 3 non calcola il seno di un angolo con un numero molto grande di cifre significative; non è un problema per gli esperimenti scientifici, resta un problema solo per questa dimostrazione e per le situazioni in cui questo rapporto assume importanza.
Alla 27^ iterazione anche il valore di x scompare.
Per ora mi limito a sospettare che con Scratch 3 i numeri siano trattati in precisione singola a 32 bit che prevede 6-7 cifre per la mantissa (meglio denominata " significant").
Note
nota 1: il valore significativo serve per fare vedere come variano le cifre significative mentre il valore diminuisce per effetto della diminuzione della parte esponenziale. Il valore 90 deve rimanere costante perchè quella è la parte significativa impostata all'inizio. Dopo qualche passo, quando l'angolo scende sotto il grado, anche la parte significativa del seno deve rimanere costante.
nota 2: il rapproto sin x/x per angoli misurati in gradi tende a 0,017543 per x che tende a zero in quanto il denominatore della frazione è un numero espresso in gradi. Nell'esperimento è anche stata inserita la variabile "sin x/x modif" che sana il suddetto problema moltiplicando il denominatore per pi.greco()/180 in modo che l'angolo sia espresso in radianti; l'operazione equivale a moltiplicare il risultato per 180 e dividerlo per pi.greco():
nota 3: di fatto si legge il contenuto della mantissa.