我有双重类型的问题。 在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中测试了它
答案 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
你确实得到正无穷大。