c# - usuario - ¿Por qué "Divide by Zero" o cualquier otra excepción no se presenta?
mostrar excepcion c# (3)
¿Es Sum
cero porque MD
no contiene elementos? En este caso, la expresión lambda no se ejecuta.
Tengo un double[]
en el que se está realizando una operación LINQ:
MD = MD.Select(n => n * 100 / MD.Sum()).ToArray();
En algunos casos, todos los elementos de MD
son 0 y luego Sum
es también cero. Entonces 0 * 100 = 0 / 0
, pero no está dando una excepción de división por cero o ninguna excepción. ¿Por qué esto es tan?
Aritmética de punto flotante IEEE-754:
using System;
using System.Linq;
namespace ConsoleApplication1 {
internal class Program {
private static void Main() {
var MD = new double [] {0, 0, 0, 0, 0};
var result = MD.Select(n => n*100/MD.Sum()).ToArray();
foreach (var item in result) {
Console.WriteLine(item);
}
Console.ReadLine();
}
}
}
Salida:
NaN
NaN
NaN
NaN
NaN
Prueba esto:
double x = 0.0;
double y = 1.0;
double z = y / x;
Eso tampoco lanzará una excepción: dejará z
como infinito positivo. No hay nada específico de LINQ aquí, es solo el comportamiento aritmético de punto flotante IEEE-754.
En tu caso, estás dividiendo cero por cero, por lo que terminas con un no-número.