问题是如何在C++中为double数据类型建模无穷大。我需要它在一个头文件中,所以我们不能使用像numeric_limits这样的函数。
是否存在表示最大值的已定义常量?
发布于 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宏才返回非零值。
发布于 2011-12-27 11:39:49
numeric_limits函数都是常量fine,因此它们作为编译时常量工作得很好(假设您使用的是当前版本的C++)。所以std::numeric_limits<double>::infinity()应该在任何环境下都能工作。
即使您使用的是较旧的版本,只要不需要编译时间常数,它仍然可以在任何地方运行。您的问题并不清楚您的使用是否真的需要编译时间常量;仅仅是在头文件中并不一定需要它。
如果您使用的是较旧的版本,并且确实需要一个编译时间常量,那么cmath中的宏INFINITY应该可以为您工作。它实际上是无穷大的float值,但它可以转换为double。
发布于 2011-12-27 10:48:26
不确定为什么不能在头文件中使用std::numeric_limits。但这也是从ANSI C中继承下来的:
#include <cfloat>
DBL_MAXhttps://stackoverflow.com/questions/8640707
复制相似问题