我试图理解为什么在以下情况下我没有溢出:
$("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;
。
任何?
答案 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.5
,1234000.5
。
即使中间缓冲区足够大以保持该重要性,其在禁止限制内的表示仍为1.234e6
。
但是,如果中间缓冲区只能容纳7位数,则要添加的对齐值为
1234000
0
-------
1234000
所以0.5
甚至在添加之前就失去了意义。在double
的情况下,您可以确定中间缓冲区不能保持308个等效数字。