Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 双溢流_C#_.net - Fatal编程技术网

C# 双溢流

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

我有一些双重类型的问题。 在MSDN上,我阅读了以下内容:

超过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不是正无穷大,而是等于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我过去也写过一篇关于双精度、浮点数和小数的文章。您可能想查看它()