MasterDrive.it   
Vai indietro   MasterDrive.it > Software Development > C/C++



Rispondi
 
Strumenti della discussione Modalità di visualizzazione
Vecchio 01-03-2010, 17:46   #1 (permalink)
Nuovo della community

 
4 Messaggi

travacort novizio della comunita' ( + 10 )
Problema di approssimazione e visualizzazione FP

Ciao, ho un piccolo problema ho il seguente programma che mi stampa un double 1.025,però quando provo a stampare la parte frazionaria mi da 024999999999......però se il mio numero double e 1.125 lo stampa bene cio 125.perche? mi pottete aiutare?

codice:
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    double x=1.025;
    int parteintera,partefrazionaria,appoggio;
    double parte_appoggio;
    //converte la parte intera del double in intero e lo memorizza in parteintera
    parteintera=(int)floor(x) ;
    cout<<"la parte  intera di x : "<<parteintera<<endl;
    // adesso la parte frazionaria
    cout<<"la parte intera senza quella frazionaria "<<parteintera<<"."<<endl ;
    parte_appoggio=x-floor(x);
    cout<<"la parte frazionaria e :"<<parte_appoggio<<endl ;
    cout<<"parte frazionaria prima della conversione: "<<parte_appoggio<<endl;
    cout<<"tentativo di estrazione e stamapa della parte frazionaria"<<endl;
    while(parte_appoggio!=0)
    {
       //...
       parte_appoggio *=10;
       appoggio=(int)floor(parte_appoggio);
       cout<<appoggio;
       parte_appoggio=parte_appoggio - floor(parte_appoggio);
    }
    cout<<endl;
    return 0;
}
Nota del Moderatore: come ben descritto in questo sticky thread, gli utenti sono tenuti a formattare appropriatamente il codice presentato, utilizzando gli appositi tag e, se del caso, un pretty printer sul sorgente prima di eseguire il copy&paste.
Per questa volta ho provveduto personalmente alla modifica: in futuro ci si attende maggiore attenzione. Grazie.


Ultima modifica di M.A.W. 1968 : 01-03-2010 a 18:10. Motivo: Formattazione del codice
travacort non è in linea   Bookmark and Share Rispondi quotando
Vecchio 01-03-2010, 18:27   #2 (permalink)
Moderatore Globale

 L'avatar di M.A.W. 1968

 
371 Messaggi

M.A.W. 1968 e' una persona affidabile ( + 250 )M.A.W. 1968 e' una persona affidabile ( + 250 )M.A.W. 1968 e' una persona affidabile ( + 250 )M.A.W. 1968 e' una persona affidabile ( + 250 )
Il formato floating point (IEEE754) utilizzato quasi universalmente, e in particolare sull'hardware Intel, è inerentemente soggetto ad errori ed approssimazioni di varia natura. Ciò risulta peraltro altamente intuitivo, non appena si ponga mente al fatto che si sta vanamente tentando di mappare un insieme con la potenza del continuo (i numeri reali) su un insieme discreto, finito e con densità reticolare disomogenea (i valori floating point sono più "densi" in prossimità dello zero: il che, peraltro, spiega bene anche l'uso della normalizzazione con leading zero).


La questione viene affrontata (e sovente anche liquidata) nelle primissime pagine di qualsiasi testo di calcolo numerico, matematica numerica, metodi numerici... ad esempio, in questo bel lavoro del professor Murli (quella directory contiene un draft: il testo definitivo è in libreria, pubblicato da Liguori) e naturalmente nel diffusissimo articolo introduttivo di Goldberg, una pietra miliare in materia.

L'argomento è già stato oggetto di numerosi thread in passato, come è facile attendersi: ad esempio recentemente qui, o qui.
__________________
Tutti gli utenti sono pregati di prendere visione del Regolamento del Forum e di rispettarlo.

Sì, un blog ce l'ho perfino io: gli è che mi manca il tempo...

• "Die ganzen Zahlen hat der liebe Gott gemacht, alles andere ist Menschenwerk." (Leopold Kronecker)
• "A Mathematician is a machine for turning coffee into theorems." (Pal Erdös)
• Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.
M.A.W. 1968 non è in linea   Bookmark and Share Rispondi quotando
Rispondi

Strumenti della discussione
Modalità di visualizzazione

Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smilies sono attive
Il codice IMG è attivo
il codice HTML è disattivato
Trackbacks are attivo
Pingbacks are attivo
Refbacks are disattivato

Salto del forum


Tutti gli orari sono GMT +2. Attualmente sono le 09:56.


Powered by vBulletin versione 3.8.0
Copyright © 2000 - 2010, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.2.0

Valid XHTML 1.0 Transitional  Creative Commons License

Eccetto dove diversamente specificato, i contenuti pubblicati in questa comunità sono rilasciati sotto Licenza
Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia License.
La comunita' di MasterDrive.it non e' responsabile di eventuali imprecisioni presenti nelle pagine.