2015-07-05 163 views
2

我想解决一个二次方程。我有所有类型为double的变量,以及变量Nan的结果。为什么双型变量返回Nan?

double a, b, c, x1, d, x2, s ; 
Console.WriteLine("Enter a value a: "); 
a = double.Parse(Console.ReadLine()); 
Console.WriteLine("Enter a value b: "); 
b = double.Parse(Console.ReadLine()); 
Console.WriteLine("Enter a value c: "); 
c = double.Parse(Console.ReadLine()); 

d = b * b - 4 * a * c; 

Console.WriteLine("solution: "); 

Console.WriteLine("1) Substitute the values entered in the equation " + "{0} * x^2 + {1} * x + {2} = 0 ", a, b, c); 
Console.WriteLine("2) Сalculate the discriminant: d = b * b - 4 * a * c "); 
Console.WriteLine("3) D = {0}*{0} - 4*{1}*{2} = {3}", b, a, c, d); 


if (d > 0) 
{ 
    x1 = (-b + Math.Sqrt(d))/2*a; 
    x2 = (-b - Math.Sqrt(d))/2*a; 
    s = (a * Math.Sqrt(x2))+ (b * x1) + c; 
    Console.WriteLine("{0} ; {1}",x1,x2); 
    Console.WriteLine("Сheck: " + "{0} * {1} + {2} * {3} + {4} = {5} ", a, x2, b, x1, c, s); 

} 
else if (d == 0) 
{ 
    x1 = (-b)/2*a; 
    Console.WriteLine(x1); 
} 
else if (d < 0) 
{ 
    Console.WriteLine("Since the discriminant is less than zero, then the equation has no solution."); 
} 

以下字符串返回南s =(a * Math.Sqrt(x2))+(b * x1)+ c; 为什么是南而不是双?

回答

6

为什么它楠,而不是增加一倍

楠不是,这是一个 - 我怀疑你得到它,因为x2为负。负数的平方根的结果在实数是未定义的(相对于复数),所以Math.Sqrt返回NaN(“不是一个数”)为负输入,as documented

d parameter     Return value 
Zero or positive   The positive square root of d. 
Negative     NaN 
Equals NaN     NaN 
Equals PositiveInfinity  PositiveInfinity 

double.NaN记录为:

表示一个不是数字(NaN)的值。这个字段是恒定的。
...
当操作的结果未定义时,方法或运算符返回NaN。