Question

Je sais que l'élargissement des conversions est sûr dans la mesure où ils entraînent aucune perte de données, mais y a-t-il un réel gain de précision ou s'agit-il d'une représentation plus longue avec le même nombre de chiffres significatifs ?

Par exemple,

#include <iostream>
#include <iomanip>
int main()
{
    float i = 0.012530f;
    std::cout << std::setw(20) << std::setprecision(7) <<  i << std::endl;

    double ii = (double)i;
    std::cout << std::setw(20) << std::setprecision(15) <<  ii << std::endl;

    double j = 0.012530;
    std::cout << std::setw(20) << std::setprecision(15) <<  j << std::endl;
}

Produit la sortie

0.01253
0.012529999949039
0.01253

L'examen des variables dans le débogueur montre que j est arrondi car la virgule flottante ne peut pas représenter exactement le nombre d'origine, mais il s'agit toujours d'une approximation plus exacte du nombre d'origine que ii.

i  = 0.012530000
ii = 0.012529999949038029
j  = 0.012529999999999999

Pourquoi le casting est-il moins précis que l’affectation directe ?Puis-je compter uniquement sur 8 chiffres d'exactitude si j'élargis la précision d'un flotteur ?

Était-ce utile?

La solution

Il semble que la réponse à votre question soit évidente.Parce que double détient plus de précision que float, vous obtenez une valeur plus précise si vous l'attribuez directement à un double et perdez en précision si vous passez par un float.

Quand tu fais float i = 0.012530f; tu obtiens un float c'est aussi proche de 0,01253 qu'un float peut obtenir.À 7 chiffres, cela ressemble à 0.012530.

Quand tu fais double j = 0.012530;, vous obtenez un double c'est aussi proche de 0,01253 qu'un double peut obtenir.

Si vous lancez le float à un double, vous obtenez un double c'est aussi proche de 0,01253 qu'un float peut obtenir.

Vous ne pouvez pas vraiment comparer les nombres produits avec différentes précisions pour voir lequel est le plus proche.Par exemple, disons que le nombre correct est 0,5 et que vous disposez de deux approximations, « 0,5001 » et « 0,49 ».Clairement, le premier est meilleur.Mais si vous affichez le premier avec 5 chiffres décimaux « 0,5001 » et le second avec un seul chiffre décimal « 0,5 », le second semble de plus près.Votre première sortie a ce genre de précision fausse et apparente en raison de l'affichage avec peu de chiffres et d'un arrondi chanceux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top