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
この場合、ラムダ式は実行されません。