Требования к математической точности стандарта C и C ++

Требуют ли стандарты C и C ++ математических операций в math.h на числах с плавающей запятой (т.е. sqrt, exp, log, sin…) чтобы вернуть численно лучшее решение?

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

Если нет, есть ли какие-либо требования к точности (возможно, для платформы / в других стандартах?), Чтобы я мог делать наихудшие оценки ошибок вычислений в моем коде? Каковы типичные пределы для числовых ошибок современных реализаций?

11

Решение

Нет, и не зря. В общем, вам нужна бесконечная точность (и бесконечное время), чтобы определить точный математический результат. Теперь в большинстве случаев вам нужно всего несколько дополнительных итераций для определения достаточных битов для округления, но это количество дополнительных битов зависит от точного результата (проще говоря: когда результат близок к .5 ULP). Даже определение дополнительного количества требуемых итераций весьма нетривиально. В результате, требовать точных результатов гораздо медленнее, чем прагматичный подход.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]