Ich habe, das C Primer Plus Buch zu lesen und bekam zu diesem BeispielLange Doppel in C
#include <stdio.h>
int main(void)
{
float aboat = 32000.0;
double abet = 2.14e9;
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("%f can be written %e\n", dip, dip);
return 0;
}
Nachdem ich diese auf meinem macbook lief ich am Ausgang ziemlich schockiert war:
32000.000000 can be written 3.200000e+04
2140000000.000000 can be written 2.140000e+09
2140000000.000000 can be written 2.140000e+09
So Ich schaute mich um und fand heraus, dass das korrekte Format, um lange doppelte anzuzeigen, %Lf
zu verwenden ist. Allerdings kann ich immer noch nicht verstehen, warum ich den doppelten abet
Wert bekam statt dem, was ich bekam, als ich es lief auf Cygwin, Ubuntu und iDeneb die
-1950228512509697486020297654959439872418023994430148306244153100897726713609
013030397828640261329800797420159101801613476402327600937901161313172717568.0
00000 can be written 2.725000e+02
grob sind Irgendwelche Ideen?
Sind Sie sicher, dass Sie genau diesen Code hatte? Ich habe es einfach auf meinem MacBook - MacOS X 10.5.8 (GCC 4.0.1) ausgeführt und Ihr Cygwin-Ergebnis erhalten. –
Ja, ich habe es nochmal überprüft. Btw ich laufe MacOS X 10.6.2 (GCC 4.2.1) – reubensammut
Wirklich bekomme ich die erwartete unsinnige Antwort auf Mac. Rätselhaft. Running 'Otool -L 'auf meiner ausführbaren Datei sagt mir, dass es gegen/usr/lib/libSystem.B.dylib Version 111.1.4 ausgeführt wird; Das ist die Bibliothek, die 'printf' bereitstellt. Wenn Sie die gleiche Version dieser Bibliothek haben, sollten Sie die gleiche Antwort erhalten. –