什么是gdb中的inf

时间:2016-06-21 15:24:03

标签: c++ gdb numeric-limits

我正在调试一个C ++程序。有一个double类型的变量import Ember from 'ember'; export default Ember.Component.extend({ actions: { changed: function() { //update() is a function you get with attrs.[prop] when using the mut helper this.attrs.field.update(this.get('field')); } } }); ,gdb将其值打印为x。然而,即使inf的值没有改变,下面的表达式也会返回false

x

当gdb说x == std::numeric_limits<double>::max()时,它不是指这种类型的最大可能值(双倍)吗?如果没有,那是什么意思?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:3)

不,无穷大不是最大值;从这个意义上说,它不是一个&#34;价值&#34;一点都不。

像NaN一样,Infinity是一种特殊价值&#34;您的IEEE754浮点数可以采用。它们中的两个表现出不寻常的特性(例如NaN!= NaN)并且不会位于数字线上,否则就是您选择的浮点类型的数值范围。

虽然1.79769e + 308(我的系统上std::numeric_limits<double>::max())是一个非常大的数字,但它是 long 的无限远方式。它们之间的每一个潜在价值(以及它们中的无穷大)在这种类型中是不可代表的。 &#34; min&#34;和&#34; max&#34;如果double的数字域只是返回-infinf,那么这些函数就无用了。