为无穷大建模最大双值

时间:2011-12-27 02:42:26

标签: c++ double infinity

问题是在C ++中为double数据类型建模无穷大。我需要在头文件中,所以我们不能使用像numeric_limits这样的函数。

是否有定义的常量表示最大值?

9 个答案:

答案 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;

您可以在INFINITYmath.h)中找到<cmath>

  

float 类型的常量表达式,表示正无穷大或无符号无穷大(如果可用);否则, float 类型的正常数在翻译时溢出。

答案 8 :(得分:-1)

这不会起作用吗?

const double infinity =  1.0/0.0;