variable que programacion float definicion c floating-point floating-point-conversion

definicion - que es float en programacion



Comprender la comparaciĆ³n de variables flotantes en if() (2)

0.1 literal es double . Pierdes precisión aquí float f = 0.1;

Se podría decir que perdemos precisión durante la comparación otra vez, entonces ¿por qué no es f == 0.1 verdadero de todos modos? Porque el float extiende al double , no al revés. En C, el tipo más pequeño siempre se extiende al más grande.

Simplificado su ejemplo, podemos decir que double(float(1.0)) != 1.0

Soluciones posibles:

  • Usa double lugar de float como un tipo de f .
  • usa cast como en tu segundo ejemplo
  • use literales float - reemplace todos los 0.1 con 0.1f

Mejor solución

Las variables de coma flotante tienen muchos problemas con las comparaciones. Ellos, incluido este, pueden resolverse definiendo su propia función de comparación:

bool fp_equal(double a, double b, double eps = FLT_EPSILON) { return fabs(a - b) < fabs(eps * a); }

La segunda parte de la pregunta:

La razón por la cual la respuesta es falsa es porque la parte else siempre corresponde al bloque if más interno. Entonces se confundió al formatear, el código es equivalente a:

#include <stdio.h> int main() { int n = 0, m = 0; if (n > 0) { if (m > 0) { printf("True"); } else { printf("False"); } } }

Esta pregunta ya tiene una respuesta aquí:

No se puede encontrar la razón para el siguiente fragmento de código:

#include <stdio.h> int main() { float f = 0.1; if (f == 0.1) printf("True"); else printf("False"); return 0; }

El resultado es falso.

#include <stdio.h> int main() { float f = 0.1; if (f == (float)0.1) printf("True"); else printf("False"); return 0; }

Ahora muestra la salida correcta. ¿Cuál es la razón detrás de esto?

También cuál es la razón de este comportamiento.

#include <stdio.h> main() { int n = 0, m = 0; if (n > 0) if (m > 0) printf("True"); else printf("False"); }


Responda a su segunda pregunta (tercer ejemplo):

De acuerdo con su criterio, el código no hace lo que usted espera:

#include <stdio.h> main() { int n = 0, m = 0; if (n > 0) if (m > 0) printf("True"); else printf("False"); }

Aquí el else pertenece al interior if , por lo que es igual a

#include <stdio.h> main() { int n = 0, m = 0; if (n > 0) { if (m > 0) { printf("True"); } else { printf("False"); } } }

pero creo que querías decir:

#include <stdio.h> main() { int n = 0, m = 0; if (n > 0) { if (m > 0) { printf("True"); } } else { printf("False"); } }

Es un buen ejemplo de por qué siempre se deben usar paréntesis de usuario en las declaraciones if .