C# 双溢流
我有一些双重类型的问题。 在MSDN上,我阅读了以下内容: 超过Double.MaxValue的操作的结果是Double.PositiveInfinity 我写了一些测试:C# 双溢流,c#,.net,C#,.net,我有一些双重类型的问题。 在MSDN上,我阅读了以下内容: 超过Double.MaxValue的操作的结果是Double.PositiveInfinity 我写了一些测试: Console.WriteLine(double.MaxValue + 100000 - double.MaxValue); Console.WriteLine(double.MaxValue); Console.WriteLine(double.MaxValue + 100000); Console.WriteLine(d
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不是正无穷大,而是等于double MaxValue。根据msdn文档,我认为这应该是肯定的
我在VS2012、.NET 4.5中测试了它,这是舍入/精度;从309位(小数点前)的数字来看,
100000
基本上是零。您还可以添加0
如果您尝试
double.MaxValue*2
-即,它实际上会注意到的东西,然后它将显示为正无穷大。Double
只有大约15位小数精度,因此当您将Double.MaxValue
添加到100000D
时,不会出现溢出,因为100000D
中的1
必须添加到Double.MaxValue
的第300位之后,这与正在添加0
如果执行以下计算
Double.MaxValue + Double.MaxValue/1e16
你得到的是正无穷大。据我所知,double-inf是def。作为1/0。但是不要问我为什么没有除法零异常。@filoe
double
/float
不要抛出除法零、溢出等;整数是不知道的。谢谢downvoter可以发表评论……很有意思,所以基本上双打在数学上是不正确的?@ServéLaurijssen当然它在数学上是不正确的double
、float
和decimal
都是近似值(尽管double
/float
采用与decimal
不同的方法表示近似值)。如果你取了一个非常大的数字,并对它做了一个非常小的修改,由于精度的原因,完全可以预料这个数字会完全丢失。最终,double
需要在8字节中存储大量不同的数字;这样做的方法只有这么多,可以表达的数字也只有这么多。你能用8个字节存储Math.PI
吗?@ServéLaurijssen这方面很有趣theme@Serv我过去也写过一篇关于双精度、浮点数和小数的文章。您可能想查看它()