Считаем арифметическое среднее "на лету"
Допустим, нам нужно выводить текущее арифметическое среднее в процессе расчёта, а не просто по завершении цикла поделить найденную в цикле сумму значений на их количество.
Проблема встречается довольно часто, увы, некоторые личности, особенно студенческие, с упорством дятлов делают в цикле расчёт вида
среднее = среднее + значение / количество
а то и
среднее = (среднее + значение) / количество
Между тем, считать среднее "на лету" и прямо в цикле, конечно же, можно, но вот так (вариант 1):
среднее = (среднее*количество + значение) / (количество + 1) вывод "среднее" количество = количество + 1
с обычной инициализацией переменных до цикла:
среднее = 0 количество = 0
Разумеется, можно и просто "тянуть" в цикле 3 переменные кодом вида (вариант 2)
сумма = сумма + значение количество = количество + 1 среднее = сумма / количество вывод "среднее"
Однако, при программировании, скажем, микроконтроллера, лишний занятый регистр не есть хорошо.
Существенно и то, что при таком расчёте в длинном цикле мы вынуждены хранить в памяти большое значение суммы, а текущее среднее таким большим не будет. Правда, значение среднее*количество
в первом варианте расчёта будет настолько же большим, но оно не хранится в регистре.
16.12.2017, 11:57 [3363 просмотра]