[EX] Aritmetica floating point e media

feddy
Visto che ultimamente questo argomento è in voga in questa stanza, ho trovato questo esercizietto carino :D


Dato il vettore $$[1.7 \cdot 10^{308}, 1.6 \cdot 10^{308}, 1.5 \cdot 10^{307},1.2 \cdot 10^{308}]$$ calcolarne la media aritmetica (in MatLab/Python/...)

Risposte
axpgn
In Just Basic dà il risultato esatto ma se si usano gli interi …

feddy
Purtroppo non conosco Just Basic, hai per caso usato una qualche funzione di tipo "media"? Perché in precisione doppia la somma di solo due di quelle componenti va in overflow, non so cosa faccia Just Basic dietro le quinte .

axpgn
No, non so se esista un comando "Media" (non sono un programmatore, conosco giusto quattro istruzioni :-D )

Ecco il codice (si fa per dire :D )

a=17*10^307
b=16*10^307
c=15*10^306
d=12*10^307

M=(a++b+c+d)/4

print M


Ed ecco il risultato

116250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000


Proverò a cercare se esiste un comando "Media"

Cordialmente, Alex

P.S.: Just Basic è una versione "semplice" e free di Liberty Basic; mi pare che adesso sia rimasto solo quest'ultimo e Just Basic non sia più supportato.
L'ho scoperto proprio qui sul Forum qualche anno fa.
Allora non avevo (e non ho) strumenti per gestire "grandi numeri", avevo provato anche a gestirli in Excel "spaccandoli" quando avevo la necessità di farlo (per qualcuno dei miei problemi/giochini), quando per caso un utente del forum, nel risolverne uno di questi, mi disse che aveva usato questo linguaggio.
Ed in effetti, gestisce grandissimi interi senza problemi e velocissimamente su un normale notebook. :wink:

feddy
Uhm, occhio che però nel codice che hai scritto hai un "+" di troppo. Cosa ti risulta scrivendolo giusto?

axpgn
Ahah, non mi sono accorto di aver incollato qui la versione con l'errore :D
Così non girava, l'ho corretto e il risultato (giusto) è quello che vedi.
Se li scrivo nel formato tuo , va in overflow ma con gli interi non c'è problema :D
Con una piccola modifica gli faccio stampare il risultato così $1.1625e308$

feddy
Ok, sicuramente Just Basic usa quello che viene chiamata "Arbitrary Precision Arithmetic", in un modo o nell'altro.

Lo scopo dell'esercizio è quello di lavorare però usando lo standard in uso, quindi usando un qualche accorgimento per evitare l'overflow, ricordando che la macchina lavora in base $2$.

feddy
Un modo per risolverlo è


Rispondi
Per rispondere a questa discussione devi prima effettuare il login.