C#如何检查一个数字是否为无穷大

10

我有一个小问题。我有两个双精度变量,它们的值都为1*10^250。现在如果我将这两个值相乘,得到的结果也将是一个双精度变量。问题是,乘法的结果会给我一个无穷大的值,但我想要防止这种情况并显示错误消息。所以,如果有人知道如何判断一个数是否为无穷大,那就太好了。

5个回答

20

8

使用

double.IsInfinity(theDoubleNumber);

你也可以使用 double.IsNegativeInfinity(), double.IsPositiveInfinity(), double.NaN(), double.MaxValue(), double.MinValue() 来完成类似的目的。


2
尝试这个...
if (Double.IsInfinity(SampleVar))
{
  // Put your logic here.
}
if (Double.IsNaN(SampleVar))
{
  // Put your logic here.
}

3
尽管这段代码片段可能会解决问题,但包括解释真的有助于提高您的帖子质量。请记住,您正在为未来的读者回答问题,这些人可能不知道您建议使用该代码的原因。 - DimaSan
这在2017年的其他答案中被建议过。不应该发布重复的答案。 - Wai Ha Lee

1
为了补充高票回答,这里提供一个快速的代码片段来演示它们的使用。
double d1 = Math.Pow(10, 250); // = 1*10^250
double d2 = Math.Pow(10, 250);
double d3 = d1 * d2; 

Console.WriteLine (d1);
Console.WriteLine (d2);
Console.WriteLine (d3);

Console.WriteLine (Double.IsInfinity(d3)); //true (using a method)
Console.WriteLine (d3 == Double.PositiveInfinity); //true (comparing to a value)
Console.WriteLine (d3 == double.PositiveInfinity); //true (note that "Double" or "double" can be used)

Console.WriteLine (d3 == Double.NaN); //false
Console.WriteLine (d3 == Double.MaxValue); //false

-3

只需提取两个变量的对数,然后将它们相加即可。 如果要相乘的变量是A和B,请在乘法之前简单地执行以下伪代码以捕获错误:

#include <math.h>
Double A,B,L1,L2;
Boolean MYERROR;
main(){
L1 = LOG10(A);
L2 = LOG10(B);
If( (L1 + L2) > DBL_MAX_10_EXP){ MYERROR = true;}else{MYERROR = false;}
}

1
问题涉及C#,但这甚至不是有效的C#。如果任一数字不为正数,则此方法也无法工作。它还排除了当a * b仍可表示时,指数超过归一化数字的最大值的情况。该普遍技术具有应用价值,但它比检查无穷大要复杂得多。 - Jeroen Mostert
我同意,它只能适用于正数。我提供的解决方案只是看起来是关于正数的问题。我还写了这是伪代码,所以既不是c#也不是c,我们都同意。另一方面,确实存在指数超出预测值的double类型数据,但它们可能会导致致命错误,因此最好避免使用它们。 - Nicolas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接