C# 在计算十进制标准偏差时获取OverflowException
通过在文本框中插入值来计算标准偏差。我有以下代码:C# 在计算十进制标准偏差时获取OverflowException,c#,.net,visual-studio,standard-deviation,C#,.net,Visual Studio,Standard Deviation,通过在文本框中插入值来计算标准偏差。我有以下代码: public decimal calcStd(List<int> ppValuesArray) { double std = 0; if (ppValuesArray.Count() > 0) { double avg = ppValuesArray.Average(); double sum = ppValuesArray.Sum(d => Math.Pow(d
public decimal calcStd(List<int> ppValuesArray)
{
double std = 0;
if (ppValuesArray.Count() > 0)
{
double avg = ppValuesArray.Average();
double sum = ppValuesArray.Sum(d => Math.Pow(d - avg, 2));
std = Math.Sqrt((sum) / ppValuesArray.Count() - 1);
}
decimal stdDev = Convert.ToDecimal(std);
return (decimal)stdDev;
}
public decimal calcStd(列表ppValuesArray)
{
双标准=0;
如果(ppValuesArray.Count()>0)
{
double avg=ppValuesArray.Average();
double sum=ppValuesArray.sum(d=>Math.Pow(d-avg,2));
std=Math.Sqrt((总和)/ppValuesArray.Count()-1);
}
十进制STDEV=转换为十进制(std);
返回(十进制)stdDev;
}
问题是,当我多次输入相同的值时,系统崩溃。e、 g.1,1,1,1会把它撞坏
我得到了一个错误:
System.OverflowException:'值对于十进制而言太大或太小。'
有什么想法吗 假设你在寻找样本标准偏差,你错过了除数-1中的括号,即
std = Math.Sqrt((sum) / (ppValuesArray.Count() - 1));
出现溢出的原因是decimal
无法表示双精度值NaN
,如果尝试取负数的平方根,则该值由Math.Sqrt(double)
返回
还有,您为什么选择列表
作为输入decimal
或double
似乎没有那么严格,这取决于您使用的数据类型,例如:
public static decimal calcStd(IEnumerable<double> ppValuesArray)
谢谢@StuartLC。这是完美的,并修复了它。我知道这很愚蠢。我需要列表的类型为int为这部分的项目。还有很多其他的方法。为修复干杯。非常感谢。
if (ppValuesArray.Count() > 1)