c++ :стратегии стабильности арифметики с плавающей запятой

Может ли кто-нибудь порекомендовать какие-либо библиотеки/подпрограммы/пакеты С++, содержащие стратегии для поддержания стабильности различных операций с плавающей запятой?

Пример :предположим, что вы хотите просуммировать по вектору/массиву один миллион long doubleв единичном интервале (0,1 ), и что каждое число имеет примерно один и тот же порядок величины. Наивное суммирование for (int i=0;i<1000000;++i) sum += array[i];ненадежно -для достаточно больших i, sumбудет иметь гораздо больший порядок величины, чем array[i], и поэтому sum += array[i]будет эквивалентно sum += 0.00. (Примечание :решение этого примера представляет собой стратегию бинарного суммирования.)

Я имею дело с суммами и произведениями тысяч/миллионов ничтожных вероятностей. Я использую произвольную -библиотеку точности MPFRC++с 2048-битным значением, но все те же проблемы остаются.

Меня больше всего волнует:

  1. Стратегии точного суммирования многих чисел (, например. выше Пример ).
  2. Когда умножение и деление потенциально нестабильны? (Если я хочу нормализовать большой массив чисел, какой должна быть константа нормализации? Наименьшее значение? Самый большой? Медиана?)
11
задан cmo 29 June 2012 в 15:56
поделиться