Trecerea plutesc la o funcție în C++ apare la schimbarea de precizie

0

Problema

Aceasta este o intrebare de noob, dar sunt curios să știu motivul din spatele acestei: -Dacă am depanare următoarele C++ cod:

void floatreturn(float i){
      //nothing
}

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

Monitorizarea trecut valoarea de o, pare a fi 23.9759998 atunci când intră floatreturn. Ca urmare, orice prelucrare de valoare în funcție ar avea nevoie pentru a tweak manual de precizie. Există un motiv pentru acest lucru, și orice cale de a evita asta?

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

Cel mai bun răspuns

0

Problema s-a întâmplat înainte de floatreturn(a);.
S-a întâmplat la float a = 23.976;
floatreturn(a); este irelevant.

Există aproximativ 2^32 valori diferite, care float poate codifica exact. 23.976 nu este unul dintre ele. Cel mai apropiat encodable float este vorba despre 23.9759998...

Pentru a evita, de a folosi valorile care poate exact codifica ca float sau tolera fiind aproape - aproximativ 1 la 224

2021-11-24 16:43:03

Marcu multumesc pentru link-ul și chux pentru răspuns concis.
mv_p

Doar un punct de învățământ pentru mine: de ce nu cout implicit la o precizie de 3 zecimale dacă vom retipări variabilă fără setare de precizie pentru ieșire? Am înțeles că stocarea float va întoarce întotdeauna cel mai apropiat binar float este posibil, și că cout este rotunjire asupra sumelor.
mv_p

@mv_p Ce a fost exact output-ai văzut?
chux - Reinstate Monica

cu un simplu 'float x = 23.976; cout << x;' văd "23.976"
mv_p

În alte limbi

Această pagină este în alte limbi

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