Martello ha scritto:
Sarebbe interessante la fonte ...
oggi guardando il dettaglio delle chiamate di Vodafone sul sito 190.it
ho trovato questo:

"
In base al Decreto Legislativo n. 213 del 24 giugno 1998 (artt. 3 e 4)
gli importi in euro del traffico telefonico effettuato sono riportati
con 5 cifre decimali (esempio: 2,12345 euro). I totali e i sub totali
del Conto Telefonico sono arrotondati, secondo le Direttive Comunitarie,
alla seconda cifra decimale dopo la virgola (esempio: 2,12 euro).
"

pare quindi che sia una legge europea, e mi ricordavo male sono 5 cifre dopo la virgola e non 5 cifre significative.
E' diverso infatti:
123,12345 ha 5 cifre dopo la virgola e 8 cifre significative
 12,12345 ha 5 cifre dopo la virgola e 7 cifre significative
  1,12345 ha 5 cifre dopo la virgola e 6 cifre significative
  0,12345 ha 5 cifre dopo la virgola e 5 cifre significative
imponendo 5 cifre dopo la virgola si obbliga ad un livello di precisione maggiore. Infatti 0,12345 è quasi insignificante percentualmente rispetto a 123, ma significativo rispetto a 1, e fondamentale rispetto a 0, Questo evidentemente garantisce anche dagli arrotondamenti visivi (penso che il legislatore si sia avvalso della consulenza di un esperto di calcolo numerico)

La regola di arrotondamento al centesimo è obbligatoriamente (per legge di questa ne sono certo, ed è anche la stessa che si usa in matematica, scienze ed ingegneria quando serve un arrotondamento al secondo decimale) questa:
X,XX0 - X,XX4 ==> X,XX (per difetto)
X,XX5 - X,XX9 ==> X,XY dove Y=X+1 (per eccesso)

la spiego:
dovendo arrotondare al secondo (ma si può generalizzare) decimale dopo la virgola per ottenere i centesimi di euro:
- se la terza cifra dopo la virgola è un numero tra 0 e 4, allora si
tronca semplicemente il numero al secondo decimale (per difetto)
- se la terza cifra dopo la virgola è un numero tra 5 e 9, allora si
incrementa il secondo decimale dopo la virgola di uno (per eccesso)
In questo modo 5 numeri del terzo decimale (0-4) provocano un
arrotondamento per difetto, e gli altri 5 numeri del terzo decimale (5-9) provocano un arrotondamento per eccesso. In questo modo si provoca una maggior "vicinanza" tra il numero preciso con tutti i decimali e quello approssimato ottenuto.
Questo statisticamente (cioé su 1000 o più arrotondamenti) provoca un
annullamento degli errori (legge dei grandi numeri) di approssimazione,
che tende a zero se il numero degli arrotondamenti fossero infiniti.

Esempio:
2,243 => 2,24
2,244 => 2,24
2,245 => 2,25
2,249 => 2,25

Questa è ovviamente la stessa regola che usa OpenOffice per l'arrotondamento visivo, chiamiamolo arrotondamento naturale. A proposito OpenOffice può mostrare fino a 22 cifre dopo la virgola (poi vediamo sotto, solo alcune significative)

Nelle formule esistono anche tutti gli altri tipi di arrotondamenti possibili:

ARROTONDA(x;numero cifre)
ARROTONDA.PER.DIF(x;numero cifre)
ARROTONDA.PER.ECC(x;numero cifre)
TRONCA(x;numero cifre)
INT(x)   #numero cifre=0
e altri più esotici:
ARROTONDA.MULTIPLO(x;multiplo)
ARROTONDA.DIFETTO(x;peso;modo)
ARROTONDA.ECCESSO(x;peso;modo)


> anche perchè il concetto di "tutte le
> cifre possibili di precisione" risulta essere un po' ambiguo.

In effetti esiste una raccomandazione (non una legge) dell'IEEE (International Elettrotecnical and Electronical Engineer )association, per garantire la precisione nei calcoli.
Non mi ricordo che numero ha forse la IEEE1240 ma tiro a caso.
Prevede che si costruiscano macchine (CPU) e programmi che elaborano numeri rezionali a 80 bit di precisione in virgola mobile. In effetti da diversi anni (da quando esiste il coprocessore matematico i387) Intel costruisce le CPU con registri capaci di memorizzare queste quantità in virgola mobile (sui numeri interi i registri sono a 64bit, ma sui numeri razionali sono a 80bit o superiori) E da allora i programmi si sono adeguati e usano questa precisione messa a disposizione dal coprocessore matematico. Per dare una idea di quanto sia 80 bit, pensate che ogni numero "intero" può venire espresso con la precisione necessaria per rappresentare 2^80, cioé circa 1.21*10^24, cioé un numero di 24 cifre. Nella realtà, per poter esprimere numero molto grandi o molto piccoli (utili nelle scienze in genere), si usa la notazione a virgola mobile. Si dedicano una parte degli 80 bit ad esprimere l'esponente (semplificando la posizione della virgola), e la parte rimanente per rappresentare la mantissa (cioé l'insieme delle cifre significative senza la virgola, sia che siano decimali sia che siano alla sinistra della virgola) In questo modo la precisione scende un po rispetto alle 24 cifre, ma possiamo esprimere numeri enormi come 1,8*10^308 (il massimo possibile in OpenOffice), dove in effetti conta più la quantità in cifre (ben 308) che non il valore dell'ultimo decimale.

Nota per i non programmatori C (i programmatori già lo sanno):
le variabili in C sono di diverso tipo e vanno scelte in base all'uso.
'int' sono interi di dimensione del registro della CPU (da 8 a 64 bit)
'long int' sono interi a minimo 32 bit
'long long int' sono interi a minimo 64 bit
'float' sono numeri razionali a 64 bit (memorizzati in virgola mobile)
'double' sono numeri razionali a 80 bit (memorizzati in virgola mobile)
Io il codice C di OpenOffice nella parte che fa i calcoli non l'ho guardato, ma mi aspetto che chi l'ha scritto abbia sicuramente usato il tipo 'double', è supportato da tutti i compilatori, su tutte le piattaforme a minimo 32bit di dimensione registro della CPU.

> Quante cifre significative usa OpenOffice?

ho fatto una prova: ho inserito in una cella: 0,12345678901234567890
impostando Formato numeri: aggiungi decimale a 20 cifre.
Il numero viene approssimato a 15 cifre significative:
0,123456789012347 infatti il 5 viene arrotondato a 7 (per via dell'apprissimazione del sitema a virgola mobile) Non è la regola di arrotondamento naturale, ma proprio l'approssimazione di memorizzazione dei numeri all'interno della macchina.
Se inserite il numero: 1,12345678901234567890
viene approssimato sempre con 15 cifre significative:
1,12345678901235

Valerio

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Rispondere a