double
问题是关于在 C++ 中为数据类型建模无穷大。我需要它在头文件中,所以我们不能使用像numeric_limits
.
是否存在代表最大值的已定义常数?
浮点数(例如双精度数)实际上可以保持正负无穷大。常量 INFINITY 应该在你的 math.h 头文件中。
进行标准潜水,发现文字:
4 宏 INFINITY 扩展为浮点类型的常量表达式,表示正或无符号无穷大(如果可用);否则为在翻译时溢出的浮点类型的正常量。
在部分7.12 Mathematics <math.h>
然后当然你有帮助函数isinf
来测试无穷大(也在 math.h 中)。
7.12.3.3 isinf 宏
int isinf(real-floating x);
说明:isinf 宏确定其参数值是否为无穷大(正数或负数)。首先,以比其语义类型更宽的格式表示的参数被转换为其语义类型。然后根据参数的类型确定。
返回:当且仅当它的参数具有无限值时,isinf 宏才返回一个非零值。
numeric_limits
函数都是 constexpr ,因此它们可以作为编译时常量正常工作(假设您使用的是当前版本的 C++)。所以std::numeric_limits<double>::infinity()
应该在任何情况下工作。
即使您使用的是旧版本,这仍然适用于您不需要编译时间常数的任何地方。从您的问题中不清楚您的使用是否真的需要编译时间常数;只是在标题中并不一定需要它。
如果您使用的是旧版本,并且确实需要编译时间常数,那么INFINITY
cmath 中的宏应该适合您。它实际上是float
无穷大的值,但它可以转换为double
.
不知道为什么你不能在头文件中使用 std::numeric_limits 。但也有这从 ANSI C 继承:
#include <cfloat>
DBL_MAX
我以为答案是“ 42.0 ”;)
这篇文章可能很有趣:
http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm
或这个:
http://www.cplusplus.com/reference/clibrary/cfloat/
MAXimum 最大有限可表示浮点数:
FLT_MAX 1E+37
DBL_MAX 1E+37
LDBL_MAX 1E+37
可以使用 DBL_MAX。这可以在 float.h 中找到,如下所示
#define DBL_MAX 1.7976931348623158e+308 /* max value */
也许在您的 C++ 环境中float.h
,请参阅http://www.gamedev.net/topic/392211-max-value-for-double-/ (DBL_MAX)
来自维基百科:
0x 7ff0 0000 0000 0000 = Infinity
0x fff0 0000 0000 0000 = −Infinity
#include <cmath>
...
double d = INFINITY;
您可以在( )中找到INFINITY
定义:<cmath>
math.h
表示正无穷或无符号无穷大的常量表达式(
float
如果可用);否则float
在翻译时溢出的类型正常量。
这不行吗?
const double infinity = 1.0/0.0;