2010-03-08 9 views
0

У меня есть, по-видимому, «простая» проблема, но я не могу найти решение по какой-то причине ...
У меня есть миллионы файлов разных размеров, и я хочу найти среднее размер файла.
Чтобы упростить это, я сгруппировал их по краям 16 КБ.
Реальный средний размер файла в наборе файлов

< 16 KB = 18689546 файлы
< 32 KB = 1365713 файлы
< 48 KB = 1168186 файлы
...

Конечно, простой (TOTAL_SIZE/количество файлов) не Работа. Он дает в среднем 291 КБ ...
Каким будет алгоритм для расчета реального среднего ...?

Thx, JD

+0

Какие типы данных вы используете? Похоже, у вас может быть проблема с переполнением. –

ответ

1

Вы могли бы быть запущены в проблему с перерасходом при подведении размеры файлов (общий размер, вероятно, не помещается в 32-битное значение). Самое легкое исправление может состоять в том, чтобы попытаться использовать 64-битный int для переменной, удерживающей сумму.

+0

Я использую 64 бит. Проблема в том, что (total_size/количество файлов) не может работать. Например, с помощью этой формулы 10 файлов размером 1 КБ и 1 файл 1 МБ дали бы в среднем 94 КБ ... что, конечно, неправильно. –

+1

Возможно, вы ищете что-то другое, чем среднее? 94 КБ - это правильное среднее из 11 файлов, которые составляют 1,01 МБ. Какое число вы ожидаете получить для этих файлов? –

+1

«что, конечно, неправильно» - я думаю, вам нужно указать немного более четко, какое среднее значение вы ищете. Среднее значение (обычно называемое «средним») размером 10 1 Кбайт файлов и 1 1 МБ-файлом составляет 94 КБ, поэтому, если вы не ищете среднее значение, вы должны четко указать, что вы * ищете. –