¿Por qué este código imprimirá sí?

1. No todos los números de coma flotante pueden representarse exactamente en forma de potencia de 2.
es decir, tome 0.2 por ejemplo, por simple que parezca representar en forma decimal, su forma binaria no lo es.

0.2 => 1/5

aquí el denominador es primo y la fracción no puede formarse exactamente por potencias negativas de 2.

2. Estos valores se representan como recurrentes.
es decir, 0.2 => 0.00110011 … (0011).

3. Flotador y doble tienen precisión diferente. La precisión de Double es más que flotante y puede representar decimal hasta más número de dígitos.
entonces, el mismo número recurrente aumentará a más número de bits en caso de doble que flotante.
y esto cambia su valor para doble y flotante,

0.00110011 (flotante)! = (no igual a) 0.0011001100110011 (doble).

4. En su pregunta 1.4 (variable f) es flotante, sin embargo, por defecto, el número con el que estamos comparando es un doble en el enunciado.
es decir, si (( flotante) f == (doble) 1.4 )

Si
LHS tiene menos precisión y se redondeará con menos bits después del decimal
RHS tiene mayor precisión y se redondeará con más número de bits después del decimal.

Por lo tanto, flotador 1.4! = doble 1.4 aquí.

5. Este no es el caso donde no ocurre la recurrencia en la representación binaria O el decimal se puede representar dentro de la precisión más baja de dos tipos de datos.

es decir, por ejemplo 0.5 puede representarse como 1/2 ===> 0.1 (binario)
entonces (flotante) 0.5 == (es igual que) (doble) 0.5
y su programa no imprimirá “sí” en este caso.

La matemática de punto flotante no es exacta. Los valores simples como 0.4 no se pueden representar con precisión usando números binarios de coma flotante, y la precisión limitada de los números de coma flotante significa que ligeros cambios en el orden de las operaciones pueden cambiar el resultado. Diferentes compiladores y máquinas almacenan resultados temporales con diferentes precisiones, por lo que los resultados serán diferentes dependiendo de los detalles de su entorno. Si realiza un cálculo y luego compara los resultados con algún valor esperado, es muy poco probable que obtenga exactamente el resultado que deseaba.

Utilice la función fabs () del archivo de encabezado math.h para comparar valores de coma flotante.

Para poner las cosas simples: el estándar dice que los valores reales de itinerancia libre se tratarán como dobles. Por lo tanto, la comparación se realiza con doble en lugar de flotante; y la representación de 1.4, que es inexacta en coma flotante, se transformará en una representación inexacta diferente de 1.4 como doble. (flotante es de 4 bytes, el doble es de 8 bytes).

En este caso, para solucionarlo, utilice el doble para la declaración. Además, nunca espere que dos variables de coma flotante sean iguales; su representación es complicada, por decir lo menos, y para que dos variables de punto flotante que son el resultado de un cálculo sean iguales, requiere mucho esfuerzo (o un cálculo precisamente similar para ambos operandos).

Comparar flotadores no es tan sencillo como parece. Depende mucho de su entorno.

Para una descripción detallada, consulte este enlace: Seguro que se ven iguales …

Para otros problemas similares, consulte esto: Comparación de números de punto flotante, edición 2012

Escribí un apéndice a mi serie de artículos de punto flotante solo para tratar este problema en particular. La respuesta correcta en este caso (como ya señalaron algunas personas) es evitar comparar flotante y doble:

http://randomascii.wordpress.com

Algunos de los otros consejos, como el uso de un valor épsilon y fabs, solo están ocultando la causa raíz. Las comparaciones de Epsilon a veces son necesarias, pero son difíciles de hacer y no deben usarse cuando no es apropiado, como aquí.

More Interesting

¿Qué tema debo elegir en mi BE sexto semestre, gráficos por computadora para ingeniería informática o .NET?

¿Cuánto costaría tener tu propio satélite personal?

¿Cómo se pronuncia el apellido de Neil Weste (autor del libro de texto CMOS VLSI Design)?

¿Qué áreas tienen un mayor crecimiento en ingeniería informática?

¿Cuál es el trabajo de un ingeniero informático en robótica?

¿Por qué la gente piensa que los programadores, los informáticos y los ingenieros informáticos están mejor sin ir a la universidad?

¿Cuáles son los trabajos en línea que puede hacer un estudiante de ingeniería informática de primer año?

¿Cómo funciona la tarjeta de sonido y la tarjeta de video de una computadora?

¿Cuál puede ser una mejor manera de prepararse para el ingeniero informático AAI JE?

¿Qué es mejor, CSE en GB Pant Engineering College, Okhla o ingeniería de TI en Maharaja Agrasen, Rohini?

¿Cuáles son las puertas lógicas digitales más inusuales o interesantes?

¿Cómo puedo determinar cuántas direcciones y líneas de datos tiene la memoria y el tamaño de la memoria?

¿Qué consejos puede ofrecerle a un estudiante de primer año con especialización en ingeniería informática que no tiene idea de lo que realmente quiere?

¿Qué propuesta de proyecto de tesis fácil de hacer pero útil y única puede sugerir en un curso de ingeniería informática?

¿Cuál es el mejor sitio de resolución de problemas para desarrollar habilidades de programación múltiples y críticas y conceptos de resolución de problemas?