printf und long double
Ich bin mit dem neuesten gcc mit Netbeans unter Windows. Warum nicht long double
Arbeit? Ist die printf
Planer %lf
falsch?
Code:
#include <stdio.h>
int main(void)
{
float aboat = 32000.0;
double abet = 5.32e-5;
long double dip = 5.32e-5;
printf("%f can be written %e\n", aboat, aboat);
printf("%f can be written %e\n", abet, abet);
printf("%lf can be written %le\n", dip, dip);
return 0;
}
Ausgabe:
32000.000000 can be written 3.200000e+004
0.000053 can be written 5.320000e-005
-1950228512509697500000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000.000000
can be written 2.725000e+002
Press [Enter] to close the terminal ...
bytes.com/topic/c/answers/...
offensichtlich gibt es ein problem mit MinGW und long double
mögliche Duplikate von kann nicht richtig drucken eines long double in C
offensichtlich gibt es ein problem mit MinGW und long double
mögliche Duplikate von kann nicht richtig drucken eines long double in C
InformationsquelleAutor gameboy | 2010-11-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Neben der falschen Modifikator, welcher port von gcc für Windows? mingw verwendet den Microsoft C-Bibliothek und ich glaube mich zu erinnern, dass diese Bibliothek bietet keine Unterstützung für die 80bits long double (microsoft-C-compiler verwenden-64-bit-long double aus verschiedenen Gründen).
InformationsquelleAutor AProgrammer
Aus der printf-manpage:
und
So, Sie wollen
%Le
, nicht%le
Edit: Einige weitere Untersuchung scheint zu zeigen, dass Mingw verwendet MSVC/win32-runtime(für Sachen wie printf) - die Karten, long double zu verdoppeln. So mischen Sie einen compiler (wie gcc) und bietet eine native long double mit einer Laufzeit, die nicht scheint .. ein Chaos.
Welchen compiler benutzt du mit Netbeans unter Windows ?
neueste gcc und MinGW
InformationsquelleAutor nos
Ja -- für
long double
verwenden, benötigen Sie%Lf
(D. H., upper-case 'L').InformationsquelleAutor Jerry Coffin
Wenn Sie sind unter Verwendung von MinGW, das problem ist, dass standardmäßig MinGW verwendet die I/O resp. Formatierung-Funktionen aus der Microsoft C-runtime, die nicht unterstützt 80-bit floating point-zahlen (
long double
==double
im Microsoft-land).Jedoch, MinGW, kommt auch mit einer Reihe von alternativen Implementierungen, die tun richtig lange unterstützen verdoppelt. Um Sie zu benutzen, stellen Sie den function-Namen mit
__mingw_
(z.B.__mingw_printf
). Je nach der Art Ihres Projektes, können Sie auch wollen, weltweit#define printf __mingw_printf
oder verwenden Sie-D__USE_MINGW_ANSI_STDIO
(die es ermöglicht, die MinGW-Versionen allerprintf
-Familie Funktionen).InformationsquelleAutor klickverbot
Wurde mit diesem Problem Tests lange verdoppelt, und ach, stieß ich auf ein Update! Sie haben, um Ihr Projekt kompilieren mit -D__USE_MINGW_ANSI_STDIO:
Code:
InformationsquelleAutor Jason Huntley
In C99 die Länge Modifikator für
long double
zu sein scheintL
und nichtl
.man fprintf
(oder gleichwertig für windows) sagen, Sie sollten für Ihre jeweilige Plattform.InformationsquelleAutor Jens Gustedt
Wie schon gesagt wurde in anderen Antworten, die richtigen conversion specifier
"%Lf"
.Möchten Sie vielleicht auf biegen Sie auf die format-Warnung durch die Verwendung von
-Wformat
(oder-Wall
, die umfasst-Wformat
) in den gcc-AufrufInformationsquelleAutor pmg