Рассчитать среднее гармоническое и среднее геометрическое, не превышая двойное максимальное значение?

Для вектора (набора чисел), умножение или деление которого будет превышать минимальное или максимальное значение типа double и / или decimal, как можно рассчитать среднее геометрическое и среднее гармоническое?

Любая существующая реализация, которую я обнаружил, не учитывала это (т. Е. Они могли рассчитывать небольшой набор, но не большой набор).

1 ответ

Можно умножить числа любого размера (например, больше, чем у любого MaxValue), представив их в виде строк и написав метод для вычисления результата.

Если вы делали "длинное умножение" в школе, то следуйте этому алгоритму, просто рассчитывая одну цифру за раз и продвигаясь от наименее значимой к наиболее значимой.

Точно так же вы можете выполнить деление этих чисел на основе строк, написав метод для "длинного деления". Вы можете построить метод для среднего геометрического на основе тех. Я не знаю о "гармонических средних"... но я надеюсь, что это также будет решаемо в этот момент.

Надеюсь это поможет.

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