¿Por qué la aritmética de punto flotante en C# es imprecisa?

Resuelto Prankster asked hace 15 años • 3 respuestas

¿Por qué el siguiente programa imprime lo que imprime?

class Program
{
    static void Main(string[] args)
    {
        float f1 = 0.09f*100f;
        float f2 = 0.09f*99.999999f;

        Console.WriteLine(f1 > f2);
    }
}

La salida es

false
Prankster avatar Apr 16 '09 05:04 Prankster
Aceptado

El punto flotante tiene un número limitado de dígitos de precisión. Si ves f1 == f2, es porque cualquier diferencia requiere más precisión de la que puede representar un flotante de 32 bits.

Recomiendo leer Lo que todo informático debería leer sobre el punto flotante

Michael avatar Apr 15 '2009 22:04 Michael

Lo principal es que esto no es solo .Net: es una limitación del sistema subyacente que la mayoría de los lenguajes usarán para representar un flotador en la memoria. La precisión sólo llega hasta cierto punto.

También puedes divertirte con números relativamente simples, teniendo en cuenta que ni siquiera son de base diez. 0,1 (1/10), por ejemplo, es un decimal periódico cuando se representa en binario, al igual que 1/3 cuando se representa en decimal.

Joel Coehoorn avatar Apr 15 '2009 23:04 Joel Coehoorn