28

double[]LINQ操作が実行されている上にあります:

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

場合によっては、のすべての要素MDが0であり、その後Sumもゼロになります。次に0 * 100 = 0 / 0、ただし、ゼロ除算の例外や例外は発生しません。なんでそうなの?

4

3 に答える 3

43

これを試して:

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

それも例外をスローしません:それはz正の無限大として残されます。ここにはLINQ固有のものはありません。IEEE-754浮動小数点演算の動作にすぎません。

あなたの場合、あなたはゼロをゼロで割っているので、あなたは数字ではないことになります。

于 2012-04-20T08:05:25.610 に答える
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
于 2012-04-20T11:44:57.577 に答える
0

要素が含まれていないSumため、ゼロですか?MDこの場合、ラムダ式は実行されません。

于 2012-04-20T08:05:33.880 に答える