поскольку <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
нарушает верхнюю границу или нет.
Там мало места infinity()
в стандарте C ++ 11. Просто это представление положительный бесконечность.
isinf()
принадлежит в C ++ к <cmath>
которая оборачивает математическую библиотеку c, а C11 говорит: Макрос isinf возвращает ненулевое значение тогда и только тогда, когда его аргумент имеет бесконечное значение. Следовательно, из этого определения вы можете сделать вывод, что isinf(numeric_limits<double>::infinity())
должно быть предоставлено.
В самом стандарте не дается никакой формальной гарантии того, что каждый конечный x должен быть меньше бесконечности. Однако если numeric_limits<double>::is_iec559
верно, то вы можете основывать свое предположение на iec 559 ака Ieee 754 стандарт, который гарантирует положительная бесконечность больше, чем все кроме себя.