【问题标题】:Why a double-type variable returns Nan?为什么双类型变量返回 Nan?
【发布时间】:2015-07-05 15:22:01
【问题描述】:

我正在尝试求解一个二次方程。我有所有 double 类型的变量,以及 s 变量 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.");
}

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

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    为什么是 Nan 而不是 double

    NaN 不是一个 type,它是一个 value - 我怀疑你得到它是因为 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-08
      • 2013-04-23
      • 2017-05-10
      • 2021-07-17
      • 1970-01-01
      • 2021-01-30
      • 2010-11-28
      • 1970-01-01
      相关资源
      最近更新 更多