Я программирую библиотеку с несколькими экземплярами длинных математических формул, которые иногда теряют значение при использовании двойных значений. Одним из примеров может быть:
(Exp(-a*a) - Exp(-b*b))*Exp(c)*Exp(d)
И a, b, c, d также включают некоторые вычисления аналогичного типа. Я могу иметь дело с двойниками, получающими это неправильно (и возвращать соответствующее сообщение об ошибке или некоторую аналитическую границу), но если я не обнаруживаю недополнение (например, по разнице экспонент), это приводит к поведению, которое я не могу себе позволить. (Как абсолютные, так и относительные ошибки могут быть огромными, когда эта разница достигает нуля, а другие экспоненты очень велики).
Есть ли что-то похожее на ключевое слово checked, которое работает для двойников? Есть ли способ, которым я могу реализовать проверки с помощью?
Любое решение, которое гарантирует его правильность, даже то, которое поднимает больше флагов, чем необходимо, подходит для меня.
Этот вопрос был предложен как дубликат, но «ручная проверка перед каждым умножением» не особенно полезно для меня.