使用双变量时为什么没有溢出?

时间:2016-06-15 08:35:56

标签: c double overflow

我试图理解为什么在以下情况下我没有溢出:

$("tr.msgdetails").click(function(e) {
  if ((e.target.tagName.toLowerCase()==='checkbox') ||
      (e.target.tagName.toLowerCase()==='input'))
  {
    alert('checked checbox');  
  }
  else
  {
    alert('row clicked');
  }
  return false;
});

在添加0.5后检查x的值时,我仍然得到double x = 1.7976931348623157E+308; //this is the max value of double x = x + 0.5;

任何?

2 个答案:

答案 0 :(得分:0)

通常,如果要向double x添加值,则添加的值应该在精度范围内,以便更改值。

对于double,您可以获得~16位数的精度。因此,如果附加值小于(x / 1E + 16),则结果不会发生变化。

通过一些试验和错误,在您的情况下,将值1E+292添加到给定的double,会得到+ INF的结果。

double x = 1.7976931348623157E+308; //this is the max value of double

x = x + 1E+292;
printf ("\nx = %lf",x);

结果

  

x = 1.#INF00

答案 1 :(得分:0)

考虑用指数表示法进行类比。

假设您被允许4位有效数字,因此数字1234000.0将由1.234e6表示。

现在尝试添加0.51234000.5

即使中间缓冲区足够大以保持该重要性,其在禁止限制内的表示仍为1.234e6

但是,如果中间缓冲区只能容纳7位数,则要添加的对齐值为

1234000
      0
-------
1234000

所以0.5甚至在添加之前就失去了意义。在double的情况下,您可以确定中间缓冲区不能保持308个等效数字。