Является ли катастрофическая отмена проблемой при вычислении скалярных произведений векторов с плавающей запятой? И если да, то как это обычно решается?

Я пишу симулятор физики на C ++ и беспокоюсь о надежности. Я читал, что катастрофическая отмена может произойти в арифметике с плавающей запятой, когда вычисляется разница двух чисел почти равной величины. Мне пришло в голову, что это может произойти в симуляторе, когда вычисляется скалярное произведение двух почти ортогональных векторов. Однако в ссылках, которые я просмотрел, обсуждается только решение проблемы путем переписывания соответствующего уравнения (например, квадратная формула может быть переписана, чтобы устранить проблему) - но это, похоже, не применяется при вычислении скалярного произведения? Думаю, мне было бы интересно узнать, является ли эта проблема типичной для физических движков и как ее решать.

16
задан Adam Zalcman 15 January 2012 в 11:22
поделиться