在 C++ 中表示浮点无穷大的方法

Cyt*_*sta 4 c++ stl conventions infinity

我想在我的程序中用 C++ 表达浮点无穷大。我遇到了两种方法来实现这一目标:使用INFINITYstd::numeric_limits<float>::infinity()

两种选择似乎都有效,但我不确定哪一种是更好的选择。一方面,INFINITYmath.h 中定义了一个简单的宏,使其易于使用。另一方面,std::numeric_limits<float>::infinity()是来自 C++ STL 的函数<limits>,并且是 C++ STL 的一部分,这似乎是一种常规方式。

总之:

我应该在 C++ 程序中使用INFINITYorstd::numeric_limits<float>::infinity()来表示浮点无穷大吗?哪一种被认为是更好的做法,是否有我应该注意的性能或可移植性注意事项?

Kon*_*lph 7

C 中引入宏来表达在该语言中无法很好表达的内容。在此特定示例中,INFINITY命名一个编译时常量。

\n

C++在语言中引入了不同的方式,允许您表达过去在 C 中需要宏来实现的相同内容(在许多情况下,但不是所有情况下)。对于这种特殊情况,C++ 有一种以各种方式命名编译时常量的方法。

\n

与 相比INFINITY,使用std::numeric_limits<float>::infinity()具有以下优点:

\n
    \n
  • 它的作用域正确地位于名称空间内,这意味着其他代码可以使用该标识符infinity来表示其他事物,而不会导致名称冲突。
  • \n
  • 它是强类型的,并命名一个类型,因此std::numeric_limits<T>::infinity()可以专门用于 的不同值T,并且可以在通用上下文中无需转换即可使用。
  • \n
  • 它是语言的一部分(而不是单独的预处理器语言),这使得第三方工具(例如 IDE)更容易与其交互。
  • \n
\n

由于历史原因,infinity()是一个函数,但这并不是\xe2\x80\x99t 非常重要,因为(因为它\xe2\x80\x99s constexpr)您可以在任何可以使用任何其他常量表达式的上下文中使用它。

\n

相反,与 相比std::numeric_limits<float>::infinity(),usingINFINITY有以下优点:

\n
    \n
  • 它更短。
  • \n
\n