由于<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 :(得分:2)
C ++ 11标准中的infinity()
几乎没有什么问题。只是它是正面无穷大的表示。
isinf()
属于C ++到<cmath>
,它包装了c数学库,C11说:当且仅当其参数具有无限值时,isinf宏才返回非零值。 / em>因此,您可以从该定义中推断出应该授予isinf(numeric_limits<double>::infinity())
。
标准本身没有给出正式保证,因为每个有限x应该比无穷大更小。但是,如果numeric_limits<double>::is_iec559
为真,那么您可以将您的假设基于iec 559又名Ieee 754标准,ensures正无穷大大于 除了自身以外的所有内容< / EM> 即可。