我有一个小问题。我有两个双精度变量,它们的值都为1*10^250。现在如果我将这两个值相乘,得到的结果也将是一个双精度变量。问题是,乘法的结果会给我一个无穷大的值,但我想要防止这种情况并显示错误消息。所以,如果有人知道如何判断一个数是否为无穷大,那就太好了。
我有一个小问题。我有两个双精度变量,它们的值都为1*10^250。现在如果我将这两个值相乘,得到的结果也将是一个双精度变量。问题是,乘法的结果会给我一个无穷大的值,但我想要防止这种情况并显示错误消息。所以,如果有人知道如何判断一个数是否为无穷大,那就太好了。
使用
double.IsInfinity(theDoubleNumber);
你也可以使用 double.IsNegativeInfinity()
, double.IsPositiveInfinity()
, double.NaN()
, double.MaxValue()
, double.MinValue()
来完成类似的目的。
if (Double.IsInfinity(SampleVar))
{
// Put your logic here.
}
if (Double.IsNaN(SampleVar))
{
// Put your logic here.
}
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
只需提取两个变量的对数,然后将它们相加即可。 如果要相乘的变量是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;}
}
a * b
仍可表示时,指数超过归一化数字的最大值的情况。该普遍技术具有应用价值,但它比检查无穷大要复杂得多。 - Jeroen Mostert