为什么“除以零”或任何其他例外未提出?

时间:2012-04-20 08:03:39

标签: c# .net linq ieee-754

我有double[]正在执行LINQ操作:

MD = MD.Select(n => n * 100 / MD.Sum()).ToArray();

在某些情况下,MD的所有元素都为0,然后Sum也为零。然后是0 * 100 = 0 / 0,但它没有给出除零异常或任何异常。为什么会这样?

3 个答案:

答案 0 :(得分:43)

试试这个:

double x = 0.0;
double y = 1.0;
double z = y / x;

这也不会引发异常:它会将z作为正无穷大。这里没有LINQ特定的 - 它只是IEEE-754浮点运算行为。

在你的情况下,你将零除零,所以你最终得到的不是数字。

答案 1 :(得分:5)

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();
        }
    }
}

输出:

NaN
NaN
NaN
NaN
NaN

答案 2 :(得分:0)

Sum是否为零,因为MD不包含任何元素?在这种情况下,不执行lambda表达式。