我正在调试一个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()
时,它不是指这种类型的最大可能值(双倍)吗?如果没有,那是什么意思?
答案 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
的数字域只是返回-inf
和inf
,那么这些函数就无用了。