sortie std::numeric_limits<double>::epsilon()
à la place. std::numeric_limits
est déclaré dans l'en-tête standard <limits>
.
Une technique plus habituelle, si vous devez vraiment calculer (plutôt que de faire confiance à votre bibliothèque standard pour fournir une valeur correcte) est
double epsilon = 1.0;
while ((1.0 + 0.5 * epsilon) != 1.0)
epsilon *= 0.5;
ou de faire le calcul.
Notez que (bien que vous ne l'avez pas montré comment vous l'avez fait) il peut effectivement être votre calcul long double
qui est incorrect, car les valeurs à virgule flottante littéral (comme 1.0
) par défaut d'être de type double
, non long double
- qui pourrait suggérer que l'erreur est dans votre calcul du résultat long double
, pas le double
un .. Si vous voulez que le résultat soit de type long double
, il serait conseillé de donner toutes ces valeurs littérales (1.0
, 0.5
) le suffixe L
, à les forcer à être de type long double
. N'oubliez pas d'utiliser une mise en forme appropriée lors de la diffusion de la valeur résultante à std::cout
, afin de garantir que la sortie a également la précision/précision dont vous avez besoin. Les paramètres par défaut (ce que vous obtenez si vous ne contrôlez pas le formatage) peuvent différer.