C# 双倍回报,但并非一直如此

C# 双倍回报,但并非一直如此,c#,.net,wpf,C#,.net,Wpf,我在这里感到困惑。我有一个函数返回一个double,有时它返回正确的值,但大多数时候它返回NaN。据我所知,当我们有类似于0/0的东西时,NaN返回。下面是返回NaN的函数,它的所有变量都声明为double public double SuperiorValue(List<double> l) { valueKn[0] = 0; valueKn[1] = 0; valueKn[2] = 1.69; valueKn

我在这里感到困惑。我有一个函数返回一个double,有时它返回正确的值,但大多数时候它返回NaN。据我所知,当我们有类似于0/0的东西时,NaN返回。下面是返回NaN的函数,它的所有变量都声明为double

public double SuperiorValue(List<double> l)
    {
        valueKn[0] = 0;
        valueKn[1] = 0;
        valueKn[2] = 1.69;
        valueKn[3] = 1.18;
        valueKn[4] = 0.95;
        valueKn[5] = 0.82;
        valueKn[6] = 0.75;
        valerKn[7] = 0.67;
        valueKn[8] = 0.63;
        valueKn[9] = 0.58;
        valueKn[10] = 0.561;
        valueKn[11] = 0.542;
        valueKn[12] = 0.523;
        valueKn[13] = 0.504;
        valueKn[14] = 0.485;
        valueKn[15] = 0.466;
        valueKn[16] = 0.447;
        valueKn[17] = 0.428;
        valueKn[18] = 0.409;
        valueKn[19] = 0.39;
        valueKn[20] = 0.382;

        Xm = (l.Sum()) / (l.Count);

        for (int i = 0; i < l.Count; i++)
        {
            sumTemporary = l[i] - Xm;
            sum = sum + sumTemporary;
        }

        kn = valueKn[l.Count];

        sx = Math.Sqrt((1 / l.Count - 1) * (sum * sum));
        Vx = sx / Xm;
        Xksup = Xm * (1 + kn * Vx);
        Xkinf = Xm * (1 - kn * Vx);

        return Xksup;

    }
public double SuperiorValue(列表l)
{
数值KN[0]=0;
数值KN[1]=0;
数值KN[2]=1.69;
数值KN[3]=1.18;
数值KN[4]=0.95;
数值KN[5]=0.82;
数值KN[6]=0.75;
valerKn[7]=0.67;
数值KN[8]=0.63;
数值KN[9]=0.58;
数值KN[10]=0.561;
数值KN[11]=0.542;
数值KN[12]=0.523;
数值KN[13]=0.504;
数值KN[14]=0.485;
数值KN[15]=0.466;
数值KN[16]=0.447;
数值KN[17]=0.428;
数值KN[18]=0.409;
数值KN[19]=0.39;
数值KN[20]=0.382;
Xm=(l.Sum())/(l.Count);
对于(int i=0;i
更让我困惑的是,列表中的元素从来都不少于3个,大于15个,它仍然经常返回NaN,但正如我所说的,它有时返回正确的值。对此有什么想法吗?

看看

Math.Sqrt((1 / l.Count - 1) * (sum * sum)) 
1/l.Count
是一个整数除法,对于所有
l.Count>1
,它将是
0
,然后您将计算
Sqrt(-1*(sum*sum))

但是
(1.0/l.Count-1)
仍然是负数,您可能需要
(1.0/(l.Count-1))

解决方案是:

Math.Sqrt((1.0 / (l.Count - 1)) * (sum * sum))

Math.Sqrt((1 / l.Count - 1) * (sum * sum)) 
1/l.Count
是一个整数除法,对于所有
l.Count>1
,它将是
0
,然后您将计算
Sqrt(-1*(sum*sum))

但是
(1.0/l.Count-1)
仍然是负数,您可能需要
(1.0/(l.Count-1))

解决方案是:

Math.Sqrt((1.0 / (l.Count - 1)) * (sum * sum))

是否使用了调试器?Is
valerKn[7]=0.67输入错误?注意
r
valerKn
中,这段代码不会编译,您也没有给我们任何可能导致
NaN
的输入值,除非您的期望值与此相反。@xanatos仅当x为0时-否则您将得到
PositiveInfinity
NegativeInfinity
Bas,不幸的是,我不知道如何使用它。德米特里是的,那是一个打字错误,我的坏,困了!Charles,代码已编译但返回NaN…..您是否使用了调试器?Is
valerKn[7]=0.67输入错误?注意
r
valerKn
中,这段代码不会编译,您也没有给我们任何可能导致
NaN
的输入值,除非您的期望值与此相反。@xanatos仅当x为0时-否则您将得到
PositiveInfinity
NegativeInfinity
Bas,不幸的是,我不知道如何使用它。德米特里是的,那是一个打字错误,我的坏,困了!Charles,代码编译后返回NaN…@DStanley-是的,我在键入第一个“修复”时意识到了这一点。已经以同样的方式更改了。谢谢你,亨克,看来我今天太累了,太困了,不知道我的基本数学。@DStanley-是的,我在键入第一个“修复”时意识到了这一点。已经以同样的方式改变了。谢谢你,亨克,看来我今天太累了,太困了,不知道我的基础数学。