2016-06-21 41 views
1

我正在调试一个C++程序。有一个类型为double的变量x,gdb的值为inf。然而,下面的表达式返回false纵然x值没有改变什么是gdb中的inf

x == std::numeric_limits<double>::max()

当GDB说inf,它并不意味着这种类型的(双)最大可能值?如果不是,那么这是什么意思?

回答

3

这意味着x == std::numeric_limits<double>::infinity()

浮点实现不必必然必须支持无穷大,但常见的 - IEEE754 - 。

从C++ 11开始,您可以使用std::isinf(x)来测试浮点数是否无限。

3

不,无穷大不是最大值;从这个意义上说,这根本不是一个“价值”。

Infinity与NaN一样,是IEEE754浮点数可以采用的“特殊值”。它们中的两个表现出不同寻常的特性(例如NaN!= NaN),并且不在数字线上,否则就是所选浮点类型的数字范围。

虽然1.79769e + 308(std::numeric_limits<double>::max()在我的系统上)是一个非常大的数字,它是一个无限远的方式。中间的每一个潜在的价值(在字面上都是无穷大)在这种类型中是不可代表的。如果它们仅返回-infinf,则“最小”和“最大”函数对于double的数字域而言将是无用的。

+0

我很确定+ INF和-INF坐在号码行上。特别是,他们坐在任何一端。更正式地说,两个无穷都是根据有限数量排序的。 – MSalters

+0

此外,“1.79E308和+ INF之间的每一个潜在值(并且从字面上看都是无穷大)”有点误导。在1.0和2.0之间,或者在0.01和0.02之间,或者pi和e,有完全相同的理性数字。我承认,数学可能是相反的直觉。 – MSalters

+1

我发现这种*无穷大的定义特别有用,它的数值x大于y的任何y值。 – Bathsheba

相关问题