Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB6:标准偏差故障_Vb6 - Fatal编程技术网

VB6:标准偏差故障

VB6:标准偏差故障,vb6,Vb6,我有一个计算标准偏差的代码: Public Function StandardDeviation(ByRef arr() As Double) As Double 'standard deviation Dim sum As Double Dim sumSquare As Double Dim value As Double Dim count As Long Dim index As Long sum = 0 sumSquare = 0 value = 0 count = 0 index =

我有一个计算标准偏差的代码:

Public Function StandardDeviation(ByRef arr() As Double) As Double

'standard deviation
Dim sum As Double
Dim sumSquare As Double
Dim value As Double
Dim count As Long
Dim index As Long
sum = 0
sumSquare = 0
value = 0
count = 0
index = 0

' evaluate sum of values
For index = LBound(arr) To UBound(arr)
    value = arr(index)
    count = count + 1
    sum = sum + value
    sumSquare = sumSquare + value * value
Next

StandardDeviation = Sqr((sumSquare - (sum * sum / count)) / count)

End Function
它似乎工作得很好

有时,这些值都是相同的,例如:

    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
    0.419208025523645
在这种情况下,我在这一行中得到错误“Invalid argument”:

StandardDeviation = Sqr((sumSquare - (sum * sum / count)) / count)

有人看到我的错误了吗?

我猜你遇到了一个问题,你“试图”取负值的平方根。当数字都相同时,sumSquare应与(sum*sum/count)相同

我建议使用以下代码

If ((sum * sum / count)) > sumSquare Then
    StandardDeviation = 0
Else
    StandardDeviation = Sqr((sumSquare - (sum * sum / count)) / count)
End If

我的猜测是你遇到了一个问题,你正在“尝试”取负值的平方根。当数字都相同时,sumSquare应与(sum*sum/count)相同

我建议使用以下代码

If ((sum * sum / count)) > sumSquare Then
    StandardDeviation = 0
Else
    StandardDeviation = Sqr((sumSquare - (sum * sum / count)) / count)
End If

您可以通过移除循环外部的计数器来加速计算

For index = LBound(arr) To UBound(arr)
  value = arr(index)
  sum = sum + value
  sumSquare = sumSquare + value * value
Next

count = UBound(arr) - LBound(arr)  + 1

您可以通过移除循环外部的计数器来加速计算

For index = LBound(arr) To UBound(arr)
  value = arr(index)
  sum = sum + value
  sumSquare = sumSquare + value * value
Next

count = UBound(arr) - LBound(arr)  + 1

这里没有真正的错误,只是你遇到了一些舍入问题。。。sumsquare的四舍五入频率比总和的平方更高,因此,从sumsquare中得到的结果略为负-(sum*sum/count)没有真正的错误,只是遇到了一些四舍五入问题。。。sumsquare的四舍五入频率比总和的平方更高,因此从sumsquare中得到的结果略为负-(sum*sum/count)