Unterschiedliche Werte bei Ausgabe von demselben Float



  • Hi,

    ich bin gerade auf ein komisches Verhalten beim Ausgeben eines Floats gestoßen und wollte frage ob mir dieses jemand erklären kann? Warum weicht der Wert ab einer gewissen Stellenanzahl ab?

    #include <stdio.h>
    
    int main ()
    {
         float f = 3.8f;
    
         printf("%.5f \n", f);
         printf("%.6f \n", f);
         printf("%.7f \n", f);
         printf("%.8f \n", f);
         printf("%.9f \n", f);
    
        return 0;
    }
    
    3.80000
    3.800000
    3.8000000
    3.79999995
    3.799999952
    
    Press any key to continue.
    


  • Gleitkommazahlen haben typabhängig nur eine konstante implementierungsabhängige Genauigkeit der Dezimalstellen (Vor- und Nachkomma), abzulesen in FLT_DIG für float und DBL_DIG für double.
    Wenn du darüber hinausgehende Genauigkeiten abrufst, wird es implementierungsabhängig ungenau, und du solltest dann auf double bzw. long double wechseln, und hast dort mehr Chancen, deine Genauigkeit zu erreichen.

    #include <float.h>
    
    int main()
    {
      printf("zugesicherte Dezimalstellengenauigkeit für float: %d",FLT_DIG);
      return 0;
    }
    


  • Super, Dankeschön.


Anmelden zum Antworten