Может ли кто-нибудь порекомендовать какие-либо библиотеки/подпрограммы/пакеты С++, содержащие стратегии для поддержания стабильности различных операций с плавающей запятой?
Пример :предположим, что вы хотите просуммировать по вектору/массиву один миллион 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-битным значением, но все те же проблемы остаются.
Меня больше всего волнует: