关于C ++ infinity()的保证

时间:2014-09-06 11:53:36

标签: c++ floating-point standards infinity

由于<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是否违反上限来进行分支。

1 个答案:

答案 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> 即可。