long double vs. printf



  • Hi,

    printf() will long double nicht richtig ausgeben. Meinen long double - Wert gibt es als -0.0000 aus. Egal, welchen Wert ich drinnen abspeichere. Mein System:
    Windows 7, MinGW-Compiler. Woran liegt das?

    grüße



  • Sonneneinfallwinkel, Riss im Raum-Zeit-Kontinuum, Haarfarbe... Die möglichen Ursachen sind vielfältig.

    Wie versuchst Du denn, printf() davon zu überzeugen, auszugeben, was Du möchtest.



  • So:

    long double wert1 = 2034553.1345;
    printf("long double-Wert: %Lf\n", wert1);
    

    grüße


  • Mod

    Das sollte so funktionieren. Gibt folgendes Programm bei dir falsche Werte aus?

    #include <stdio.h>
    int main()
    {
      long double wert1 = 2034553.1345;
      printf("long double-Wert: %Lf\n", wert1); 
    }
    


  • Ich nehme an, dass du CodeBlocks benutzt und da läuft der gcc ohne explizite Vorgaben im "Feature"-Modus gnu89, d.h. bisschen was aus C89, bisschen was aus C99, bisschen eigene builtins, bisschen sonstige eigene "Features", und das kollidiert u.U. mit der von MinGW verwendeten (nicht eigenen!) Laufzeitbibliothek von MS.
    Deshalb: Verwende den Compiler in einem definierten Sprachstandard-Modus, d.h. -ansi oder meinetwegen auch -std=c99, Hauptsache ein expliziter Modus ist gesetzt; dann klappts auch mit dem Code:

    #ifdef __int64  /* MinGW? */
    #ifndef __STRICT_ANSI__ /* nicht strikt konformer Sprachstandard */
    #error expliziten Sprachstandard setzen!
    #endif
    #endif
    ...
    long double wert1 = 2034553.1345;
    printf("long double-Wert: %Lf\n", wert1); 	
    ...
    

    Fazit: Mache deinen Code standardkonform und wenn du dir darüber nicht sicher bist, lies die Compiler-Dokumentation, setze den Sprachstandard explizit und verlasse dich nicht darauf, dass irgendwelche IDE oder Compilerbauer dies für dich tun.


  • Mod

    Wutz schrieb:

    Fazit: Mache deinen Code standardkonform und wenn du dir darüber nicht sicher bist, lies die Compiler-Dokumentation, setze den Sprachstandard explizit und verlasse dich nicht darauf, dass irgendwelche IDE oder Compilerbauer dies für dich tun.

    😕 Jetzt verstehe ich nicht wo drauf du hinaus willst, Wutz. Die zwei gezeigten Zeilen sind doch 100% standardkonform (C89 und alles was folgte), wenn ein Compiler oder Laufzeitumgebung das nicht richtig machen, dann sind es diese die Schuld sind!



  • Naja, ganz so habe ich das nicht gemeint, sondern:
    - der Standard macht klare Aussagen
    - der Compiler setzt den Standard fehlerfrei um
    - der Entwickler ist zu blöd, den Compiler im Standard compilieren zu lassen

    oder

    gcc bla.c   /* Compiler compiliert in dem Modus, den seine Erbauer als Default gesetzt haben, muss nicht ein strikter Standardmodus sein */
    
    gcc -ansi bla.c /* Compiler muss im strikten Standardmodus arbeiten, ohne Compilerbauer"features" */
    

Anmelden zum Antworten