51 lines
1.2 KiB
VB.net
51 lines
1.2 KiB
VB.net
Function avg(what() As Variant) As Variant
|
|
'treats non-numeric strings as zero
|
|
Dim L0 As Variant, total As Variant
|
|
For L0 = LBound(what) To UBound(what)
|
|
If IsNumeric(what(L0)) Then total = total + what(L0)
|
|
Next
|
|
avg = total / (1 + UBound(what) - LBound(what))
|
|
End Function
|
|
|
|
Function standardDeviation(fp As Variant) As Variant
|
|
Static list() As Variant
|
|
Dim av As Variant, tmp As Variant, L0 As Variant
|
|
|
|
'add to sequence if numeric
|
|
If IsNumeric(fp) Then
|
|
On Error GoTo makeArr 'catch undimensioned list
|
|
ReDim Preserve list(UBound(list) + 1)
|
|
On Error GoTo 0
|
|
list(UBound(list)) = fp
|
|
End If
|
|
|
|
'get average
|
|
av = avg(list())
|
|
|
|
'the actual work
|
|
For L0 = 0 To UBound(list)
|
|
tmp = tmp + ((list(L0) - av) ^ 2)
|
|
Next
|
|
tmp = Sqr(tmp / (UBound(list) + 1))
|
|
|
|
standardDeviation = tmp
|
|
|
|
Exit Function
|
|
makeArr:
|
|
If 9 = Err.Number Then
|
|
ReDim list(0)
|
|
Else
|
|
'something's wrong
|
|
Err.Raise Err.Number
|
|
End If
|
|
Resume Next
|
|
End Function
|
|
|
|
Sub tester()
|
|
Dim x As Variant
|
|
x = Array(2, 4, 4, 4, 5, 5, 7, 9)
|
|
For L0 = 0 To UBound(x)
|
|
Debug.Print standardDeviation(x(L0))
|
|
Next
|
|
End Sub
|