Output std::numeric_limits<double>::epsilon()
statt. std::numeric_limits
ist in der Standardkopfzeile <limits>
deklariert.
Eine übliche Technik, wenn Sie es wirklich berechnen muss (und nicht Ihre Standardbibliothek zu vertrauen, einen korrekten Wert zu liefern) ist
double epsilon = 1.0;
while ((1.0 + 0.5 * epsilon) != 1.0)
epsilon *= 0.5;
oder die Berechnung zu tun.
Beachten Sie, dass (obwohl Sie haben nicht gezeigt, wie Sie es getan haben) kann es sein, tatsächlich Ihre long double
Berechnung, die nicht korrekt ist, da wörtliche Floating-Point-Werte (wie 1.0
) standardmäßig double
vom Typ ist, nicht long double
- die Macht schlagen Sie vor, der Fehler ist in Ihrer Berechnung der long double
Ergebnis, nicht die double
ein .. Wenn Sie möchten, dass das Ergebnis von Typ sein, wäre es ratsam, alle diese wörtlichen Werte (1.0
, 0.5
) die L
Suffix zu geben zwinge sie dazu, vom Typ long double
zu sein.
Denken Sie auch daran, beim Streaming des Ergebniswerts an std::cout
die entsprechende Formatierung zu verwenden, um sicherzustellen, dass die Ausgabe auch die von Ihnen benötigte Genauigkeit/Genauigkeit aufweist. Die Standardeinstellungen (was Sie erhalten, wenn Sie die Formatierung nicht steuern) können sich unterscheiden.