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

Nik*_*wal 28 .net c# linq ieee-754

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

MD = MD.Select(n => n * 100 / MD.Sum()).ToArray();
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 43

试试这个:

double x = 0.0;
double y = 1.0;
double z = y / x;
Run Code Online (Sandbox Code Playgroud)

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

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

  • @NikhilAgrawal:为什么会引发例外?在这种情况下,当你将0除以0时,你会得到"不是数字"而不是无穷大,所以你最终会得到一个非数字值的数组. (2认同)

小智 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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

NaN
NaN
NaN
NaN
NaN
Run Code Online (Sandbox Code Playgroud)