C#中的二次方程求解器

时间:2014-08-09 00:12:07

标签: c#

我正在尝试用C#编写一个简单的二次方程求解器,但由于某种原因,它并没有给我正确的答案。事实上,它给了我非常大的数字作为答案,通常是数百万。

有人可以请一些亮点吗?我得到了正根和负根的完全相同的答案。 (试过两种不同的数学方法)

static void Main(string[] args)
    {
        int a;
        int b;
        int c;

        Console.WriteLine("Hi, this is a Quadratic Equation Solver!");
        Console.WriteLine("a-value: ");
        try
        {
            a = int.Parse(Console.ReadLine());
            Console.WriteLine("b-value: ");
            b = int.Parse(Console.ReadLine());
            Console.WriteLine("c-value: ");
            c = int.Parse(Console.ReadLine());
            Console.WriteLine("Okay, so your positive root is: " + quadForm(a, b, c, true));
            Console.WriteLine("And your negative root is: " + quadForm(a, b, c, false));
        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
        }
        Console.ReadLine();
    }

    static int quadForm(int a, int b, int c, Boolean pos)
    {
        int x = 0;
        if (pos)
            x = ((-b + (int) (Math.Sqrt((b * b) - (4 * a * c)))) / (2 * a));
        else
            x = ((-Math.Abs(b) - (int) (Math.Sqrt(Math.Pow(b,2) - (4 * a * c)))) / (2 * a));
        return x;
    }

1 个答案:

答案 0 :(得分:3)

试用此版本的quadForm

static double quadForm(int a, int b, int c, bool pos)
{
    var preRoot = b * b - 4 * a * c;
    if (preRoot < 0)
    {
        return double.NaN;
    }
    else
    {
        var sgn = pos ? 1.0 : -1.0;
        return (sgn * Math.Sqrt(preRoot) - b) / (2.0 * a);
    }
}