Как рассчитать среднее значение int64_t

Мне нужно вычислить среднее значение n чисел. N неизвестен во время компиляции. Каждое из чисел может быть типа int64_t, но я знаю, что среднее также подходит для типа int64_t. Проблема в том, что сумма n чисел может быть слишком большой для int64_t. Какие-либо предложения?

использовать int128_t?

Tarick Welling 19.06.2019 10:22

@TarickWelling: В стандарте такого типа нет, и даже если бы он был, он на самом деле не ответил бы на вопрос (который, я признаю, вероятно, должен был быть сформулирован в терминах intmax_t). Теперь, если бы вы превратили эту ссылку в ответ, это был бы полезен...

DevSolar 19.06.2019 10:25

вы не указали свою платформу или компилятор, поэтому: GCC и CLANG поддерживают нестандартный вариант 128-битного int. Но я думаю, что предпочел бы поэтапный подход

Tarick Welling 19.06.2019 10:28

gcc также имеет __builtin_add_overflow, который сообщит вам, если произойдет переполнение, что также может помочь

xception 19.06.2019 10:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
176
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Среднее значение двух номеров без переполнения

  Average = (a / 2) + (b / 2) + (((a % 2) + (b % 2)) / 2)

Это можно распространить и на n чисел.

Предположим, у вас есть n чисел из N1, N2....Nn-1, Nn

Average = (N1 / n) + (N2 / n) +.....+ (Nn-1 / n) + (Nn / n)

                            +

          ((N1 % n) + (N2 % n) +.....+ (Nn-1 % n) + (Nn % n)) / n

отлично сделано, я как раз собирался предложить более сложный подход, основанный на той же идее

xception 19.06.2019 10:40

Интересное решение. Однако это требует, чтобы вы знали n до подачи номера первый, но если вы это сделаете, это сработает хорошо.

Mike Vine 19.06.2019 10:47

есть ли способ сослаться на этот ответ на вопрос, предложенный другими в комментариях к ОП? Я чувствую, что это гораздо лучший ответ, чем тот, который там указан

xception 19.06.2019 10:49

Осторожно, если n большое, может возникнуть угловой случай, когда ((N1 % n) + (N2 % n) +.....+ (Nn-1 % n) + (Nn % n)) переполняется.

NO_NAME 19.06.2019 11:25

@NO_NAME N для этого должно быть> 2 ^ 32, я думаю, что это подходит для большинства случаев, если кому-то нужно, я думаю, что могу придумать алгоритм, который может поддерживать теоретически бесконечное N (неизвестно заранее)

xception 19.06.2019 12:28

Другие вопросы по теме