Рассчитать среднее гармоническое и среднее геометрическое, не превышая двойное максимальное значение?
Для вектора (набора чисел), умножение или деление которого будет превышать минимальное или максимальное значение типа double и / или decimal, как можно рассчитать среднее геометрическое и среднее гармоническое?
Любая существующая реализация, которую я обнаружил, не учитывала это (т. Е. Они могли рассчитывать небольшой набор, но не большой набор).
1 ответ
Можно умножить числа любого размера (например, больше, чем у любого MaxValue), представив их в виде строк и написав метод для вычисления результата.
Если вы делали "длинное умножение" в школе, то следуйте этому алгоритму, просто рассчитывая одну цифру за раз и продвигаясь от наименее значимой к наиболее значимой.
Точно так же вы можете выполнить деление этих чисел на основе строк, написав метод для "длинного деления". Вы можете построить метод для среднего геометрического на основе тех. Я не знаю о "гармонических средних"... но я надеюсь, что это также будет решаемо в этот момент.
Надеюсь это поможет.