c# - programacion - punto flotante plc
¿Por qué C#permite dividir un número distinto de cero en cero en el tipo de coma flotante? (4)
Por qué C # permite:
1.0 / 0 // Infinity
Y no permite:
1 / 0 // Division by constant zero [Compile time error]
Matemáticamente, ¿hay alguna diferencia entre los números integrales y de coma flotante al dividir por cero?
La división de punto flotante está gobernada por IEEE754, que especifica que dividir por cero debe ser infinito. No existe un estándar para la división de enteros, por lo que simplemente se ajustaron a las reglas estándar de las matemáticas.
Matemáticamente, no hay diferencia. Sin embargo, con las computadoras, solo la especificación estándar de punto flotante IEEE-754 tiene valores especiales para representar ± ∞. Los enteros solo pueden contener ... enteros :-)
El estándar IEEE para aritmética de coma flotante (IEEE 754) es el estándar más utilizado para el cálculo de coma flotante, y es seguido por muchas implementaciones de hardware y software, incluido el compilador C #.
Esto significa que cualquier variable de coma flotante puede contener criaturas extrañas como PositiveInfinity, NegativeInfinity y Not-a-Number (abreviado como NaN). De acuerdo con las reglas aritméticas IEEE 754, algunas operaciones pueden generar cualquiera de estos valores de coma flotante no finitos. Por ejemplo, una operación de coma flotante no válida como dividir cero por cero da como resultado NaN.
En su ejemplo específico, puede ver que C # (a diferencia de VB) sobrecarga el operador / para significar un entero o una división de coma flotante. Esto significa que el compilador determina si debe hacer cálculos aritméticos enteros o de punto flotante según el tipo de los números utilizados.
También hay otras sutilezas interesantes . Y vale la pena leer la entrada del blog de Eric Lippert sobre el tema.
Según Microsoft, "el desbordamiento aritmético de coma flotante o la división por cero nunca arroja una excepción, porque los tipos de coma flotante se basan en IEEE 754 y, por lo tanto, tienen disposiciones para representar infinito y NaN (No es un número)".
Más sobre esto aquí .