问题是在C ++中为double
数据类型建模无穷大。我需要在头文件中,所以我们不能使用像numeric_limits
这样的函数。
是否有定义的常量表示最大值?
答案 0 :(得分:24)
浮点数(例如双精度数)实际上可以保持正无穷大。常量INFINITY应该在math.h标题中。
进行标准潜水并找到文字:
4宏INFINITY扩展为float类型的常量表达式 表示正或无符号无穷大(如果有);否则到了 float类型的正常量,在转换时溢出。
在7.12 Mathematics <math.h>
部分
然后当然你有辅助函数isinf
来测试无穷大(也在math.h中)。
7.12.3.3 isinf宏
int isinf(real-floating x);
描述:isinf宏确定其参数值是否为无穷大(正数) 或否定)。首先,以比格式更宽的格式表示的参数 其语义类型转换为其语义类型。然后 确定基于参数的类型。
返回: 当且仅当其参数具有a时,isinf宏才返回非零值 无限的价值。
答案 1 :(得分:20)
numeric_limits
函数都是constexpr,因此它们可以正常工作作为编译时常量(假设您使用的是当前版本的C ++)。所以std::numeric_limits<double>::infinity()
应该适用于任何环境。
即使您使用的是旧版本,这仍然适用于您不需要编译时常量的任何地方。从您的问题中不清楚您的使用是否确实需要编译时间常数;只是在标题中并不一定需要它。
如果您使用的是旧版本,并且确实需要编译时常量,则cmath中的宏INFINITY
应该适合您。它实际上是无穷大的float
值,但可以转换为double
。
答案 2 :(得分:9)
不确定为什么不能在头文件中使用std :: numeric_limits。但是这也是从ANSI C继承的:
#include <cfloat>
DBL_MAX
答案 3 :(得分:1)
我认为答案是&#34; 42.0&#34; ;)
这篇文章可能会引起关注:
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
答案 4 :(得分:1)
也许在您的C ++环境中float.h
,请参阅http://www.gamedev.net/topic/392211-max-value-for-double-/(DBL_MAX)
答案 5 :(得分:1)
来自Wikipedia:
0x 7ff0 0000 0000 0000 = Infinity
0x fff0 0000 0000 0000 = −Infinity
答案 6 :(得分:1)
可以使用DBL_MAX。这可以在float.h中找到,如下所示
#define DBL_MAX 1.7976931348623158e+308 /* max value */
答案 7 :(得分:0)
#include <cmath>
...
double d = INFINITY;
您可以在INFINITY
(math.h
)中找到<cmath>
:
float
类型的常量表达式,表示正无穷大或无符号无穷大(如果可用);否则,float
类型的正常数在翻译时溢出。
答案 8 :(得分:-1)
这不会起作用吗?
const double infinity = 1.0/0.0;