Вычисляем среднее арифметическое в Java

В нашей жизни мы далеко не всегда используем точные цифры, да это и не каждый раз удобно. Некоторые результаты обобщают, выражая среднее значение, особенно когда речь идет о статистике, прогнозах и отчетах. Это может быть и среднее время в пути, и средняя успеваемость ученика, и средняя заработная плата на предприятии, и средняя температура по больнице (в последнем примере мы, разумеется, шутим). Но как бы там не было, мы должны знать, как быстро и точно посчитать среднее арифметическое число. Об этом — наша статья. Дополнительно рассмотрим на примерах, как вычисляет среднее арифметическое число компилятор языка программирования Java.
На практике формулу о том, как найти или вычислить среднее арифметическое, изучают в пятом классе. Что же, давайте освежим знания, полученные в далеком (а для кого-то и в недалеком) детстве.
Что такое среднее арифметическое? Формула нахождения числа
Средним арифметическим некоторого множества чисел называют сумму всех этих чисел, разделенных на общее количество слагаемых. То есть искомое значение вычисляет следующая формула:

В примере ниже мы считаем среднее арифметическое трех простейших чисел:
- 2,
- 3,
- 4.
Давайте обозначим сре днее арифметическое латинской буквой «m» и вычислим сумму вводимых чисел:
А чтобы рассчитать среднее арифмети ческое, останется разделить эту сумму на три. Таким образом, формулу нахождения можно представить следующим образом:

И все? Так просто?
И да, и нет. Если углубляться в математику, мы узнаем, что существуют различные способы вычисления, однако мы не будем усложнять вышесказанное и ограничимся стандартной формулой:

- x — это наше среднее арифметическое;
- xn— конкретное значение числа;
- n — общее количество значений.
У такой формулы есть много плюсов:
- прекрасный выбор при нормальном распределении значений в существующей выборке;
- интуитивная доступность;
- посчитать легко и просто.
Однако с математической точки зрения тут существуют и минусы:
- используя эту формулу, довольно сложно представить распределение введенных значений;
- есть вероятность запутаться в различных величинах.
Сложно ли посчитать среднее число в Java?
Теперь давайте посмотрим, как расчет среднего числа может выглядеть в программном коде. Заодно и проверим пример выше ;-):
public class Main <
public static void main(String[] args) <
System.out.println(«Значение среднего арифметического равно: » + result / nums.length);
Можно было легко догадаться, что мы получим 3, значит вышеописанная формула нахождения среднего арифметического числа находит правильный результат.
На деле вы можете ввести в код выше какие угодно значения чисел, а также изменить количество введенных чисел. Однако если надо вычислить более точный результат (это особенно актуально для ввода ряда чисел с десятичным значением), тип данных в Java надо будет изменить на double:

- https://skysmart.ru/articles/mathematic/kak-najti-srednee-arifmeticheskoe;
- https://www.examclouds.com/ru/java/java-core-russian/srednee-arifmeticheskoye.
Все это выглядит чрезвычайно просто. Если же вы ищете действительно сложные и продвинутые решения по Java-программированию, обратите внимание на программу Java-курса в Otus:
Как найти среднее арифметическое число в Excel
Для того чтобы найти среднее значение в Excel (при том неважно числовое, текстовое, процентное или другое значение) существует много функций. И каждая из них обладает своими особенностями и преимуществами. Ведь в данной задаче могут быть поставлены определенные условия.
Например, средние значения ряда чисел в Excel считают с помощью статистических функций. Можно также вручную ввести собственную формулу. Рассмотрим различные варианты.
Как найти среднее арифметическое чисел?
Чтобы найти среднее арифметическое, необходимо сложить все числа в наборе и разделить сумму на количество. Например, оценки школьника по информатике: 3, 4, 3, 5, 5. Что выходит за четверть: 4. Мы нашли среднее арифметическое по формуле: =(3+4+3+5+5)/5.
Как это быстро сделать с помощью функций Excel? Возьмем для примера ряд случайных чисел в строке:
- Ставим курсор в ячейку А2 (под набором чисел). В главном меню – инструмент «Редактирование» — кнопка «Сумма». Выбираем опцию «Среднее». После нажатия в активной ячейке появляется формула. Выделяем диапазон: A1:H1 и нажимаем ВВОД.


- В основе второго метода тот же принцип нахождения среднего арифметического. Но функцию СРЗНАЧ мы вызовем по-другому. С помощью мастера функций (кнопка fx или комбинация клавиш SHIFT+F3).

- Третий способ вызова функции СРЗНАЧ из панели: «Формула»-«Формула»-«Другие функции»-«Статические»-«СРЗНАЧ».

Или: сделаем активной ячейку и просто вручную впишем формулу: =СРЗНАЧ(A1:A8).
Теперь посмотрим, что еще умеет функция СРЗНАЧ.

Найдем среднее арифметическое двух первых и трех последних чисел. Формула: =СРЗНАЧ(A1:B1;F1:H1). Результат:
Среднее значение по условию
Условием для нахождения среднего арифметического может быть числовой критерий или текстовый. Будем использовать функцию: =СРЗНАЧЕСЛИ().
Найти среднее арифметическое чисел, которые больше или равны 10.
Результат использования функции СРЗНАЧЕСЛИ по условию «>=10»: 
Третий аргумент – «Диапазон усреднения» — опущен. Во-первых, он не обязателен. Во-вторых, анализируемый программой диапазон содержит ТОЛЬКО числовые значения. В ячейках, указанных в первом аргументе, и будет производиться поиск по прописанному во втором аргументе условию.
Внимание! Критерий поиска можно указать в ячейке. А в формуле сделать на нее ссылку.
Найдем среднее значение чисел по текстовому критерию. Например, средние продажи товара «столы».

Функция будет выглядеть так: =СРЗНАЧЕСЛИ($A$2:$A$12;A7;$B$2:$B$12). Диапазон – столбец с наименованиями товаров. Критерий поиска – ссылка на ячейку со словом «столы» (можно вместо ссылки A7 вставить само слово «столы»). Диапазон усреднения – те ячейки, из которых будут браться данные для расчета среднего значения.
В результате вычисления функции получаем следующее значение:

Внимание! Для текстового критерия (условия) диапазон усреднения указывать обязательно.
Как посчитать средневзвешенную цену в Excel?
Как посчитать средний процент в Excel? Для этой цели подойдут функции СУММПРОИЗВ и СУММ. Таблица для примера:

Как мы узнали средневзвешенную цену?

С помощью формулы СУММПРОИЗВ мы узнаем общую выручку после реализации всего количества товара. А функция СУММ — сумирует количесвто товара. Поделив общую выручку от реализации товара на общее количество единиц товара, мы нашли средневзвешенную цену. Этот показатель учитывает «вес» каждой цены. Ее долю в общей массе значений.
Среднее квадратическое отклонение: формула в Excel
Различают среднеквадратическое отклонение по генеральной совокупности и по выборке. В первом случае это корень из генеральной дисперсии. Во втором – из выборочной дисперсии.
Для расчета этого статистического показателя составляется формула дисперсии. Из нее извлекается корень. Но в Excel существует готовая функция для нахождения среднеквадратического отклонения.

Среднеквадратическое отклонение имеет привязку к масштабу исходных данных. Для образного представления о вариации анализируемого диапазона этого недостаточно. Чтобы получить относительный уровень разброса данных, рассчитывается коэффициент вариации:
среднеквадратическое отклонение / среднее арифметическое значение
Формула в Excel выглядит следующим образом:
СТАНДОТКЛОНП (диапазон значений) / СРЗНАЧ (диапазон значений).
Коэффициент вариации считается в процентах. Поэтому в ячейке устанавливаем процентный формат.
Нахождение среднего арифметического
Среднее арифметическое значение элементов массива вычисляется по следующей формуле:
. (3.2)
Алгоритм вычисления соотношения (3.2) похож на ранее рассмотренное вычисление суммы элементов массива, и в листинге 3.3 приведена программа, реализующая решение данной задачи.
Листинг 3.3. Вычисление среднего арифметического значения элементов массива
using namespace std;
cout <<«\nSumma left»> _getch();
Нахождение среднего арифметического при условии
Внесем небольшие изменения в предыдущую программу. Так, нам необходимо подсчитать среднее значение только для тех элементов, которые расположены в интервале от -15 до 20 (включая границы интервала). При заполнении массива обеспечим внесение в него наряду с положительными значениями еще и отрицательные.
Программная разработка, решающая поставленную задачу, приведена в листинге 3.4. Здесь для подсчета элементов массива, участвующих в расчете среднего значения, используется переменная M.
Листинг 3.4. Вычисление среднего значения элементов массива при условии
using namespace std;
cout <<«\nS left»> _getch();
Поиск максимального элемента в массиве
В листинге 3.5 приведена программа поиска максимального элемента в числовом массиве. Сам массив предварительно заполняется случайными целыми числами. Блок-схема алгоритма показана на рис. 3.1.
Листинг 3.5. Поиск максимального элемента в массиве
using namespace std;
cout <<«\n’Максимальный элемент left»> _getch();

Рис. 3.1. Блок-схема к программе листинга 3.5
Поиск индексов в массиве
Рассмотрим еще один пример. Пусть наша задача заключается в том, чтобы найти индексы максимального и минимального элементов в массиве. В листинге 3.6 приведена программа поиска указанных индексов для массива элементов, предварительно заполненного случайными числами. Блок-схема алгоритма показана на рис. 3.2.

Если максимальных или минимальных элементов несколько, то данная программа отображает только индексы первых найденных элементов.
Листинг 3.6. Поиск индексов минимального и максимального элементов массива
Среднее арифметическое куууучи чисел
Можно конечно их всех просуммировать в какой-нибудь BigInteger (или собственную реализацию), но нет ли способов покрасивее и попроще 🙂 ?
p.s. в моём случае скорость не играет роли, но вообще хотелось бы увидеть что-нибудь не очень тормознутое
А в чём проблема? Сумма двух милллиардов int ‘ов поместится в long даже если они все равны максимальному значению. А уж если int ‘ы нормальные.
Так что смело суммируйте всё в long с детектированием переполнения. И делите на количество.
![]()
Всё ещё проще на самом деле.
- Имеем последовательность чисел x1, x2, x3, x4, x5.
- k=2; //количество чисел, текущий шаг
- Находим среднее арифметическое первых двух чисел r=(x1+x2)/k .
- Далее не будем постоянно считать суммы, а будем брать следующий множитель для следующего среднего арифметического: n=(k*r+x3)/((k+1)* r) . //x3 естественно на каждом шаге меняется на следующий элемент
- Следующее среднее арифметическое: r=r*n .
- k=k+1
- Повторяем шаги 4..6 для нужного числа чисел.
![]()
![]()
Предложу свой вариант.
Этот миллиард группируется в какой-то класс. Много объектов. Группируется так, чтобы сумма этой группы нечаянно не превыcила Integer.MAX_VALUE . В объект заносится сумма этих чисел и их количество. Сами числа уже не нужны. Далее вычисляется ср. арифметическое для этого объекта. Придётся создать много таких объектов-групп. После разбивания всех входных данных на эти объекты-группы, зная общую сумму и общее количество, делим — и всё.
Очень хорошо, если хоть кто-то понял мой алгоритм.
Страдает точность, но переполнение невозможно.
А если нам не нужно добавлять новые элементы в среднее арифметическое, мы можем сразу делить каждый элемент на n.
![]()
Среднее арифметическое можно искать не складывая все числа разом. Их можно складывать группами.
то же самое можно получить, если складывать пересекающимися парами
Ну или любыми другими количественными группами, главное, чтобы они пересекались, если количество чисел нечетное и не делится по группам ровно. Если же, например, можно сразу разбить все на равные группы, то они могут не пересекаться.
И, разумеется, можно комбинировать. То есть, на первом уровне, например, складывать парами, на втором тройками.
Группы конечно могут быть и по сто и по тысяче чисел. Но думаю, что это может помочь от переполнения.