с плавающей запятой — гарантии о бесконечности C ++ ()

поскольку <cmath> происходит от стандарта C, но <limits> является родным C ++, при условии, что numeric_limits<double>::has_infinity() правда (редактировать: а также что numeric_limits<double>::is_iec559() верно), гарантирует ли где-нибудь стандарт C ++ (98/11/14), что всегда верно следующее? Ссылки на MSDN и cplusplus.com, похоже, не дают какого-либо полезного объяснения.

  • isinf(numeric_limits<double>::infinity())
  • x < numeric_limits<double>::infinity() При условии isfinite(x) правда
  • !( numeric_limits<double>::infinity()<numeric_limits<double>::infinity() )

Я задаю этот вопрос, потому что я хочу написать функцию вида f(double x, double upper_bound)где тело функции будет разветвляться согласно x нарушает верхнюю границу или нет.

0

Решение

Там мало места infinity() в стандарте C ++ 11. Просто это представление положительный бесконечность.

isinf() принадлежит в C ++ к <cmath> которая оборачивает математическую библиотеку c, а C11 говорит: Макрос isinf возвращает ненулевое значение тогда и только тогда, когда его аргумент имеет бесконечное значение. Следовательно, из этого определения вы можете сделать вывод, что isinf(numeric_limits<double>::infinity()) должно быть предоставлено.

В самом стандарте не дается никакой формальной гарантии того, что каждый конечный x должен быть меньше бесконечности. Однако если numeric_limits<double>::is_iec559 верно, то вы можете основывать свое предположение на iec 559 ака Ieee 754 стандарт, который гарантирует положительная бесконечность больше, чем все кроме себя.

2

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


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