对最大双精度值的无穷大进行建模

Modeling infinity for the largest double value

本文关键字:无穷大 建模 双精度      更新时间:2023-10-16

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

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

浮点数(如双精度数(实际上可以保持正负无穷大。常量无穷大应该在你的 math.h 标头中。

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

4 宏无穷大扩展到浮点型的常量表达式表示正无穷大或无符号无穷大(如果有(;否则到 a浮点型的正常数,在翻译时溢出。

在第 7.12 Mathematics <math.h> 节中

<小时 />

然后当然,您有辅助函数isinf来测试无穷大(这也在math.h中(。

7.12.3.3 信息因子宏

int isinf(real-floating x(;

说明:isinf 宏确定其参数值是否为无穷大(正或负数(。首先,以比其语义类型将转换为其语义类型。然后确定基于参数的类型。

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

numeric_limits函数

都是constexpr,因此它们可以作为编译时常量正常工作(假设您使用的是当前版本的C++(。因此,std::numeric_limits<double>::infinity()应该在任何情况下工作。

即使您使用的是旧版本,这仍然可以在不需要编译时常量的任何位置工作。从您的问题中不清楚您的使用是否真的需要编译时常量;仅仅在标题中并不一定需要它。

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

不知道为什么你不能在头文件中使用 std::numeric_limits。但也有从ANSI C继承下来的:

#include <cfloat>
DBL_MAX
可以使用
可以使用

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(

我认为答案是"42.0";)

本文可能会引起您的兴趣:

http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

或者这个:

http://www.cplusplus.com/reference/clibrary/cfloat/

最大有限可

表示浮点数:

FLT_MAX  1E+37
DBL_MAX  1E+37
LDBL_MAX 1E+37  

来自维基百科:

0x 7ff0 0000 0000 0000   = Infinity
0x fff0 0000 0000 0000   = −Infinity
#include <cmath>
...
double d = INFINITY;

您可以在 <cmath> ( math.h 中找到定义INFINITY

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

行不通吗?

const double infinity =  1.0/0.0;