De passage à flotter à une fonction en C++ semble changer de précision

0

La question

C'est très une question de noob, mais je suis curieux de connaître la raison derrière cela: -Si je déboguer le code C++ suivant:

void floatreturn(float i){
      //nothing
}

int main(){
    float a = 23.976;
    floatreturn(a);
    return 0;
}

Le suivi de la valeur passée de l'un, il semble être 23.9759998 lors de la saisie de floatreturn. Par conséquent, tout traitement de la valeur dans la fonction nécessiterait de modifier manuellement la précision. Est-il une raison pour cela, et de toute façon à l'éviter?

c++ floating-point
2021-11-24 04:32:57
1

La meilleure réponse

0

La question qui s'est passé avant floatreturn(a);.
C'est arrivé à float a = 23.976;
floatreturn(a); n'est pas pertinent.

Il y a environ 2^32 valeurs différentes que float peut coder exactement. 23.976 n'est pas l'un d'eux. Le plus proche encodable float est sur 23.9759998...

Pour l'éviter, utiliser les valeurs qui peuvent exactement coder comme un float ou tolérer d'être à proximité - propos 1 224

2021-11-24 16:43:03

Merci Marc pour le lien et chux pour la concision de réponse.
mv_p

Juste un plus pédagogique pour moi: pourquoi ne cout par défaut pour une précision de 3 décimales si nous réimpression de la variable, sans réglage de précision pour la sortie? Je reçois que le stockage de l'float renverra toujours le plus proche binaire float possible, et que le cout est de l'arrondissement.
mv_p

@mv_p Ce qui était l' exacte de sortie que vous avez vu?
chux - Reinstate Monica

avec un simple 'float x = 23.976; cout << x;" je vois "23.976"
mv_p

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................