1 Imports System.Runtime.CompilerServices
2
3 Namespace Math.Statistics
4
5     Public Class Average
6
7         Public Sum#, N%
8
9         Public ReadOnly Property Average As Double
10             <MethodImpl(MethodImplOptions.AggressiveInlining)>
11             Get
12                 Return Sum / N
13             End Get
14         End Property
15
16         Sub New()
17         End Sub
18
19         Sub New(data As IEnumerable(Of Double))
20             With data.ToArray
21                 Sum = .Sum
22                 N = .Length
23             End With
24         End Sub
25
26         Public Overrides Function ToString() As String
27             Return $"Means of {N} samples = {Average}"
28         End Function
29
30         Public Shared Operator +(avg As Average, x#) As Average
31             avg.Sum += x
32             avg.N += 1
33             Return avg
34         End Operator
35
36         Public Shared Widening Operator CType(avg As DoubleAs Average
37             Return New Average() + avg
38         End Operator
39     End Class
40 End Namespace