Obwohl der Ausfall ANSI C eine Form mit variabler Argument Erklärung zu definieren, die sauber ein erweiterter Genauigkeit long double
Typ, dessen handhaben kann Format unterscheidet sich von der von double
geführt hat zu dem Typ ist effektiv veraltet auf vielen Plattformen (unglücklicherweise, IMHO, da es ein guter Typ für den Einsatz nicht nur auf Systemen mit x87 Coprozessoren war, sondern auch auf Systemen ohne FPU), der einzige vernünftige Weg für ein System mit richtig erweitert -precision Typen, um eine Aussage wie zu behandeln:
long double a = 0.1;
ist das 0,1 Zahlenliteral Start Leben als long double
gleich 14,757,395,258,967,641,293/147,573,952,589,676,412,928 zu haben; es wäre absurd, diese Aussage a
zu 7,205,759,403,792,794/72,057,594,037,927,936 (ungefähr 0,10000000000000000555, der Wert von (double)0.1
) zu setzen.
könnte es wohl ein paar Fälle, in denen als long double
vor immer umgewandelt Abwärts Zahlenliteral Start Leben mit könnte es dazu führen, von einem anderen Wert zu erhalten, was wäre es, wenn sie das Leben als double
oder float
gestartet (zB der nächste float
zu 9007199791611905.0
ist 9007200328482816, was 536870911 über dem angeforderten Wert ist, aber (float)(double)9007199791611905.0
ergibt 9007199254740992, was 536870913 darunter ist. Natürlich, wenn man den Float-Wert 9007200328482816.0f möchte, sollte man wahrscheinlich eine dezimale Darstellung verwenden, die näher ist was man wirklich will.
'long double' ist ein Typ mit noch mehr Präzision als' double'., Genau wie 'long int' eine größere Variante von' int' ist. –
Wie für Ihr Problem, * was * Fehler bekommen Sie? Bearbeiten Sie Ihre Frage so, dass sie die vollständige und unbearbeitete Fehlerausgabe enthält, * und * ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve), das die Fehler verursacht. –
Ich habe die Frage für weitere Details einschließlich der Fehlermeldung bearbeitet. –