Pasando a flotar a una función en C++ parece cambiar de precisión

0

Pregunta

Este es un muy noob la pregunta, pero tengo curiosidad por saber la razón detrás de esto: -Si me depurar el siguiente código C++:

void floatreturn(float i){
      //nothing
}

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

Monitoreo el valor que se pasa de una, parece ser 23.9759998 al entrar floatreturn. Como resultado, cualquier procesamiento de el valor de la función requeriría para ajustar manualmente la precisión. Hay una razón para esto, y alguna manera de evitarlo?

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

Mejor respuesta

0

El problema que sucedió antes de la floatreturn(a);.
Sucedió en float a = 23.976;
floatreturn(a); es irrelevante.

Hay alrededor de 2^32 diferentes valores que float puede codificar exactamente. 23.976 no es uno de ellos. El más cercano codificables float es acerca de 23.9759998...

Para evitar, valores de uso que exactamente se puede codificar como un float o tolerar estar cerca - cerca de 1 parte en 224

2021-11-24 16:43:03

Gracias Marcos por el enlace y chux para la concisa respuesta.
mv_p

Uno más en el plano educativo para mí: ¿por qué cout defecto con una precisión de 3 decimales si nosotros imprimimos la variable sin ajuste de precisión para la salida? Tengo que almacenar el flotador devolverá siempre el más cercano binario float posible, y que cout es el redondeo.
mv_p

@mv_p Lo que fue la exacta de salida que usted vio?
chux - Reinstate Monica

con un simple " float x = 23.976; cout << x; I see "23.976"
mv_p

En otros idiomas

Esta página está en otros idiomas

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