Newsgroup: it.comp.lang.c++
Titolo: Ancora il virgola mobile

Scusate se insisto sul problema degli errori causati dalla rappresentazione
dei numeri in virgola mobile, ho capito perfettamente la causa e ho anche
capito che per questo genere di algoritmi il C non e il linguaggio piu
adatto. Veramente non mi e chiaro il perché questo problema si verifica solo
a volte con gli stessi dati in input. Ad esempio usando Visual C++ 6.0 e
compilando quelle 5 righe postate precedentemente ottengo 0 (vado a vedere
in memoria), mentre con gli stessi dati (-0.2) all'interno dell'algoritmo
vero no.
Ormai pero non ho piu il tempo per riscrivere il programma in un altro
linguaggio ad es. Fortran e vorrei arrivare ad una soluzione. Su msdn
Library c'e scritto che una soluzione e usare la libreria BCD Binary Coded
Decimal, ma non da alcuna spiegazione al riguardo o perlomeno non l'ho
trovata. Qualcuno puo darmi qualche delucidazione, meglio in e-mail:
bru...@libero.it
 per non rompere le scatole al newsgroup? Sarei veramente
riconoscente. Oppure sapete indicarmi una fonte di informazione dove possa
trovare in modo rapido una soluzione?
Grazie a tutti.
Rudy.

 vero no.
Errori di arrotondamento e di approssimazione sono inerenti alla
rappresentazione dei numeri a virgola mobile nei computers; non
dipendono dal linguaggio.
QUALUNQUE linguaggio e' un modo astratto di rappresentare operazioni
da compiere su entita' numeriche, o che possono essere messe in
corrispondenza biunivoca con entita' numeriche (come i caratteri
ASCII, o le istruzioni per la CPU).  Se sia la rappresentazione
interna di alcuni numeri (quelli in virgola mobile) che alcune delle
operazioni da effettuare sono intrinsecamente approssimati, questo non
dipende dal linguaggio.
Puoi pero' definire delle rappresentazioni numeriche differenti dai
float o double (ad esempio una classe "numero razionale" implementata
con due interi); e maniere di compiere le operazioni su quei tipi (ad
esempio un metodo "moltiplica due numeri razionali") che non abbiano i
difetti su accennati, con lo svantaggio di consumare piu' tempo e
spazio.
Puoi pero' definire delle rappresentazioni numeriche differenti dai
float o double (ad esempio una classe "numero razionale" implementata
con due interi); e maniere di compiere le operazioni su quei tipi (ad
esempio un metodo "moltiplica due numeri razionali") che non abbiano i
difetti su accennati, con lo svantaggio di consumare piu' tempo e
spazio.  Le librerie BCD cui tu accenni sono uno dei tools possibili.
Naturalmente ci sono delle cose un po' piu' complicate: ad esempio con
i numeri irrazionali come la mettiamo?  Li non c'e' proprio scampo.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it

vero no.
Sicuro che i due frammenti di codice siano del tutto equivalenti?
Prova a ripostarli (al limite mandameli in e-mail), se ho tempo
li provo.
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------

dipendono dal linguaggio.
Si potrebbe migliorare la rappresentazione, aggiungendo al proprio
programma delle funzionalita' di aritmetica in precisione multipla.
Pero' credo che stiamo uscendo fuori dal topic.
--
Andrea Laforgia (
andrea_...@bigfoot.com
)
---------------------------------------------