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

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

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

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

Ответ 1

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