visual usuario type tipo round retornar producido predefinidas por mostrar excepciones excepcion error ejemplos detectado derivarse definidas decimals debe controlada c# .net linq ieee-754

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.