0

我有一个结构数组

Private Type udtSingle
    Dim Count As Long
    Dim Value As Single
end Type

Private m(2) As udtSingle

假设数组是这样填充的:

m(0).Count = 5
m(0).Value = 100
m(1).Value = 1
m(1).Count = 10

你可以看到我们有 5*100 和 1*10。

计算平均值的最佳方法是什么?

for i as integer = 0 to m.upperbound()
     cAll += m(i).Count * m(i).Value
     iCount+=m(i).Count
next i

dim average as currency
average = cAll / iCount

那行得通,但我确实有很多 .Count 和高 .Value,而且我害怕溢出。

请问我还能做什么?

如果数组变得非常大,无论如何我都会溢出。我不能在 for-next-statement 中重新计算平均值吗?我想是这样,但我能想到一个优雅的解决方案。

ps:是的,我知道,代码是一种伪代码......

4

1 回答 1

0

声明cAllDouble避免溢出。

Dim cAll as Double

接着

cAll += Convert.ToDouble(m(i).Count) * Convert.ToDouble(m(i).Value)

双倍范围高达约 ±1.7 × 10^308。

于 2013-10-16T20:22:21.343 回答