为什么不向Double.MaxValue添加数字使其成为Double.PositiveInfinity?

Dum*_*ore 7 c#

Double.PositiveInfinity文档中,它写道:

当操作结果大于MaxValue时,返回此常量.

但是,当我尝试将数字添加到最大值时double,它不会返回infinity.我试过这个:

double maxVal = Double.MaxValue;
maxVal = maxVal + 10000000000000000000;
Console.WriteLine(maxVal + " " + Double.IsInfinity(maxVal)); //prints 1.79769313486232E+308 False
Run Code Online (Sandbox Code Playgroud)

为什么会这样?为什么没有显示maxValinfinity

这是一个工作小提琴.

Guf*_*ffa 9

这是因为您要添加的数量的方式过小使在一个凹痕Double.MaxValue值.

a的精度double大约是15位数,所以你需要一个至少1e292足以让它变大的数字.

那将被10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000写出来.

  • @TimSchmelter:“double.MaxValue + 1”的结果实际上是“double.MaxValue”。计算机在将数字相加时无法使用无限精度,因此当“1”与“double.MaxValue”处于相同范围时就会消失。另一个例子是“1 + 1e-20”,其中结果是“1”。如果您尝试将“1.00000000000000000001”表示为“double”,您将得到“1”,因为最后一个小数超出了“double”的精度。 (2认同)