双溢出

时间:2013-12-04 08:02:33

标签: c# .net

我有双重类型的问题。 在MSDN上,我阅读了以下double max value

  

超过Double.MaxValue的操作的结果是Double.PositiveInfinity。

我写了一些测试:

Console.WriteLine(double.MaxValue + 100000 - double.MaxValue);
Console.WriteLine(double.MaxValue);
Console.WriteLine(double.MaxValue + 100000);
Console.WriteLine(double.IsPositiveInfinity(double.MaxValue + 100000));

看到了这个结果:

0
1,79769313486232E+308
1,79769313486232E+308
False

我不明白,double.MaxValue + 100000不是正无穷大,而是等于MaxValue的两倍。根据msdn文档,我认为它应该是PositiveInfinity。

我在VS2012,.NET 4.5中测试了它

2 个答案:

答案 0 :(得分:24)

这是四舍五入/精确;从数字长度为309位(小数点前)的角度来看,100000基本上为零。您也可以添加0

如果您尝试double.MaxValue * 2 - 即实际上会引起注意的事物,那么它将显示为正无穷大。

答案 1 :(得分:10)

Double只有大约15个十进制数字的精度,因此当您将Double.MaxValue添加到100000D时,由于1中的100000D必须没有溢出在Double.MaxValue的第300位之后添加,这与添加0相同。

如果您执行以下计算

Double.MaxValue + Double.MaxValue/1e16

你确实得到正无穷大。