Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Среднее арифметическое Больших чисел. / 4 сообщений из 4, страница 1 из 1
16.10.2009, 13:16
    #36255551
phenix1024
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднее арифметическое Больших чисел.
Добрый день. Подскажите, пожалуйста, по вопросу нахождения среднего арифметического из большого кол-ва чисел Long(матрица мин. 1000*1000 элементов, цвета из API GetPixel).
Нужно найти "средний" (среднее арифметическое) между этими цветами.
При тупом сложить\разделить на кол-во на первом этапе(сложить) получаем переполнение)

Желателен вариант с наибольшим быстродействием.

Заранее спасибо за ответы.
...
Рейтинг: 0 / 0
16.10.2009, 13:28
    #36255603
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднее арифметическое Больших чисел.
phenix1024,

во-первых, складывать цвета как Long-и бессмысленно, так как надо складывать цветовые компоненты. 1000*1000 = 20 бит, цветовая компонента 8 бит, итого 28 бит, Long потянет;
во-вторых, надо избавиться от GetPixel, см. DIB Section.
...
Рейтинг: 0 / 0
18.10.2009, 16:41
    #36257945
bac
bac
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднее арифметическое Больших чисел.
Для больших рядов для вычисления среднего можно воспользоваться методом скользящего среднего.
Самый простой из них
Среднее = (Среднее + X(i)) / 2
...
Рейтинг: 0 / 0
19.10.2009, 02:17
    #36258462
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Среднее арифметическое Больших чисел.
Можно использовать рекурсивную формулу, которая легко выводится из определения среднего.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
' ZVI:2009-10-19 Recursive average of array
Function AvgRecursive(Arr) 'As Long
  Dim x, i&, ret#
  If Not IsArray(Arr) Then AvgRecursive = Arr: Exit Function
  For Each x In Arr
    i = i +  1 
    ret = (i -  1 ) / i * ret + x / i
  Next
  AvgRecursive = ret
End Function

Sub Test()
  Const N =  10 
  Dim Arr()
  ReDim Arr( 1  To N)
  For i =  1  To N
    Arr(i) = i
  Next
  Debug.Print "Expected = 5.5", "AvgRecursive = " & AvgRecursive(Arr)
End Sub
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Среднее арифметическое Больших чисел. / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]