double[]LINQ操作が実行されている上にあります:
MD = MD.Select(n => n * 100 / MD.Sum()).ToArray();
場合によっては、のすべての要素MDが0であり、その後Sumもゼロになります。次に0 * 100 = 0 / 0、ただし、ゼロ除算の例外や例外は発生しません。なんでそうなの?
これを試して:
double x = 0.0;
double y = 1.0;
double z = y / x;
それも例外をスローしません:それはz正の無限大として残されます。ここにはLINQ固有のものはありません。IEEE-754浮動小数点演算の動作にすぎません。
あなたの場合、あなたはゼロをゼロで割っているので、あなたは数字ではないことになります。
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
要素が含まれていないSumため、ゼロですか?MDこの場合、ラムダ式は実行されません。