首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为最大的双精度值建模无穷大

为最大的双精度值建模无穷大
EN

Stack Overflow用户
提问于 2011-12-27 10:42:26
回答 9查看 42.9K关注 0票数 17

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

是否存在表示最大值的已定义常量?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-12-27 10:44:58

浮点数(如双精度)实际上可以容纳正无穷大和负无穷大。无穷大的常量应该在math.h头文件中。

去了标准潜水,找到了下面的文字:

4宏无穷大扩展为浮点型的常量表达式,表示正的或无符号的无穷大(如果可用);否则扩展为在转换时溢出的浮点型的正常量。

7.12 Mathematics <math.h>部分

当然,您还可以使用辅助函数isinf来测试无穷大(也在math.h中)。

7.12.3.3 isinf宏

int isinf(实数浮点x);

说明: isinf宏确定其参数值是否为无穷大(正或负)。首先,以比其语义类型更宽的格式表示的参数被转换为其语义类型。然后,根据参数的类型进行确定。

返回:当且仅当其参数具有无限值时,isinf宏才返回非零值。

票数 26
EN

Stack Overflow用户

发布于 2011-12-27 11:39:49

numeric_limits函数都是常量fine,因此它们作为编译时常量工作得很好(假设您使用的是当前版本的C++)。所以std::numeric_limits<double>::infinity()应该在任何环境下都能工作。

即使您使用的是较旧的版本,只要不需要编译时间常数,它仍然可以在任何地方运行。您的问题并不清楚您的使用是否真的需要编译时间常量;仅仅是在头文件中并不一定需要它。

如果您使用的是较旧的版本,并且确实需要一个编译时间常量,那么cmath中的宏INFINITY应该可以为您工作。它实际上是无穷大的float值,但它可以转换为double

票数 21
EN

Stack Overflow用户

发布于 2011-12-27 10:48:26

不确定为什么不能在头文件中使用std::numeric_limits。但这也是从ANSI C中继承下来的:

代码语言:javascript
复制
#include <cfloat>

DBL_MAX
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8640707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档