Saltar al contenido

¿Por qué C# permite dividir un número distinto de cero por cero en el tipo de punto flotante?

Intenta entender el código correctamente previamente a adaptarlo a tu proyecto si tdeseas aportar algo puedes compartirlo con nosotros.

Solución:

Según Microsoft, “el desbordamiento aritmético de punto flotante o la división por cero nunca genera una excepción, porque los tipos de punto flotante se basan en IEEE 754 y, por lo tanto, tienen disposiciones para representar el infinito y NaN (no es un número)”.

Más sobre esto aquí.

Matemáticamente, no hay diferencia. Sin embargo, con las computadoras, solo la especificación de punto flotante estándar IEEE-754 tiene valores especiales para representar ±∞. Los enteros solo pueden contener… enteros 🙂

El estándar IEEE para la aritmética de punto flotante (IEEE 754) es el estándar más utilizado para el cálculo de punto flotante y es seguido por muchas implementaciones de hardware y software, incluido el compilador C#.

Esto significa que una variable de punto flotante en C# puede contener un patrón de bits que representa criaturas extrañas como PositiveInfinity, NegativeInfinity y Not-a-Number (abreviado como NaN). Bajo las reglas aritméticas IEEE 754, cualquiera de estos valores de punto flotante no finitos puede generarse mediante ciertas operaciones. Por ejemplo, una operación de punto flotante no válida, como dividir cero por cero, da como resultado NaN.

En sus ejemplos específicos, puede ver que C# (a diferencia de VB) sobrecarga el operador / para significar una división de números enteros o de punto flotante, según los tipos numéricos de los números involucrados.

En el primer ejemplo, el compilador ve 1.0 y, por lo tanto, usa la división de punto flotante y coloca el resultado en una variable de punto flotante. Esa variable contiene una representación del infinito.

En el segundo ejemplo, el compilador ve 1 y, por lo tanto, usa la división de enteros y coloca el resultado en una variable entera. Debido a que los tipos integrales en C# usan el sistema de complemento a dos para la representación y no usan patrones de bits especiales para representar el infinito (o NaN), el compilador genera un error.

También hay otras sutilezas interesantes de punto flotante. Y vale la pena leer la entrada del blog de Eric Lippert sobre el tema.

Al final de todo puedes encontrar las críticas de otros desarrolladores, tú igualmente tienes la habilidad insertar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *