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

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

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

во-первых, складывать цвета как Long-и бессмысленно, так как надо складывать цветовые компоненты. 1000*1000 = 20 бит, цветовая компонента 8 бит, итого 28 бит, Long потянет;
во-вторых, надо избавиться от GetPixel, см. DIB Section.
...
Рейтинг: 0 / 0
Среднее арифметическое Больших чисел.
    #36257945
bac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для больших рядов для вычисления среднего можно воспользоваться методом скользящего среднего.
Самый простой из них
Среднее = (Среднее + X(i)) / 2
...
Рейтинг: 0 / 0
Среднее арифметическое Больших чисел.
    #36258462
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
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Среднее арифметическое Больших чисел.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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