+ Rispondi
Risultati da 1 a 2 di 2

Discussione: Problema di approssimazione e visualizzazione FP

  1. #1
    Nuovo della community
    reputazione complessiva: 1 1

    Messaggi
    4

    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 alle 18:10 Motivo: Formattazione del codice

  2. #2
    Moderatore Globale L'avatar di M.A.W. 1968
    reputazione complessiva: 19 19

    Messaggi
    374
    Blogs
    14
    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.

+ Rispondi

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi