Program to find the Roots of Quadratic equation

12 May, 2022
Given a quadratic equation in the form ax2 + bx + c, find roots of it.  
Examples :
Input  :  a = 1, b = -2, c = 1Output :  Roots are real and same             1
Input  :  a = 1, b = 7, c = 12Output :  Roots are real and different             -3, -4
Chapters
descriptions off, selected
captions settings, opens captions settings dialog
captions off, selected
English
This is a modal window.
Beginning of dialog window. Escape will cancel and close the window.
End of dialog window.
Input  :  a = 1, b = 1, c = 1Output :  Roots are complex              -0.5 + i1.73205             -0.5 – i1.73205  
Below is the direct formula for finding roots of the quadratic equation.
There are the following important cases. 
If b*b < 4*a*c, then roots are complex
(not real).
For example roots of x2 + x + 1, roots are
-0.5 + i0.86603 and -0.5 - i0.86603

If b*b == 4*a*c, then roots are real 
and both roots are same.
For example, roots of x2 - 2x + 1 are 1 and 1

If b*b > 4*a*c, then roots are real 
and different.
For example, roots of x2 - 7x - 12 are 3 and 4
Below is the implementation of the above formula.
C
C++
Java
Python3
C#
PHP
Javascript
/* C program to find roots of a quadratic equation */#include <math.h>#include <stdio.h>#include <stdlib.h> // Prints roots of quadratic equation ax*2 + bx + xvoid findRoots(int a, int b, int c){    // If a is 0, then equation is not quadratic, but    // linear    if (a == 0) {        printf("Invalid");        return;    }     int d = b * b - 4 * a * c;    double sqrt_val = sqrt(abs(d));     if (d > 0) {        printf("Roots are real and different \n");        printf("%f\n%f", (double)(-b + sqrt_val) / (2 * a),               (double)(-b - sqrt_val) / (2 * a));    }    else if (d == 0) {        printf("Roots are real and same \n");        printf("%f", -(double)b / (2 * a));    }    else // d < 0    {        printf("Roots are complex \n");        printf("%f + i%f\n%f - i%f", -(double)b / (2 * a),               sqrt_val/(2 * a), -(double)b / (2 * a), sqrt_val/(2 * a));    }} // Driver codeint main(){    int a = 1, b = -7, c = 12;       // Function call    findRoots(a, b, c);    return 0;}
/* C++ program to find roots of a quadratic equation */#include <bits/stdc++.h>using namespace std; // Prints roots of quadratic equation ax*2 + bx + xvoid findRoots(int a, int b, int c){    // If a is 0, then equation is not quadratic, but    // linear    if (a == 0) {        cout << "Invalid";        return;    }     int d = b * b - 4 * a * c;    double sqrt_val = sqrt(abs(d));     if (d > 0) {        cout << "Roots are real and different \n";        cout << (double)(-b + sqrt_val) / (2 * a) << "\n"             << (double)(-b - sqrt_val) / (2 * a);    }    else if (d == 0) {        cout << "Roots are real and same \n";        cout << -(double)b / (2 * a);    }    else // d < 0    {        cout << "Roots are complex \n";        cout << -(double)b / (2 * a) << " + i" << sqrt_val / (2 * a)             << "\n"             << -(double)b / (2 * a) << " - i" << sqrt_val / (2 * a) ;    }} // Driver codeint main(){    int a = 1, b = -7, c = 12;       // Function call    findRoots(a, b, c);    return 0;}
// Java program to find roots// of a quadratic equation import java.io.*;import static java.lang.Math.*;class Quadratic {     // Prints roots of quadratic    // equation ax * 2 + bx + x    static void findRoots(int a, int b, int c)    {        // If a is 0, then equation is not        // quadratic, but linear         if (a == 0) {            System.out.println("Invalid");            return;        }         int d = b * b - 4 * a * c;        double sqrt_val = sqrt(abs(d));         if (d > 0) {            System.out.println(                "Roots are real and different \n");             System.out.println(                (double)(-b + sqrt_val) / (2 * a) + "\n"                + (double)(-b - sqrt_val) / (2 * a));        }        else if (d == 0) {            System.out.println(                "Roots are real and same \n");             System.out.println(-(double)b / (2 * a) + "\n"                               + -(double)b / (2 * a));        }        else // d < 0        {            System.out.println("Roots are complex \n");             System.out.println(-(double)b / (2 * a) + " + i"                               + sqrt_val / (2 * a)  + "\n"                               + -(double)b / (2 * a)                               + " - i" + sqrt_val / (2 * a)) ;        }    }     // Driver code    public static void main(String args[])    {         int a = 1, b = -7, c = 12;               // Function call        findRoots(a, b, c);    }} // This code is contributed by Sumit Kumar.
# Python program to find roots# of a quadratic equationimport math # Prints roots of quadratic equation# ax*2 + bx + x  def findRoots(a, b, c):     # If a is 0, then equation is    # not quadratic, but linear    if a == 0:        print("Invalid")        return -1    d = b * b - 4 * a * c    sqrt_val = math.sqrt(abs(d))     if d > 0:        print("Roots are real and different ")        print((-b + sqrt_val)/(2 * a))        print((-b - sqrt_val)/(2 * a))    elif d == 0:        print("Roots are real and same")        print(-b / (2*a))    else:  # d<0        print("Roots are complex")        print(- b / (2*a), " + i", sqrt_val/ (2 * a))        print(- b / (2*a), " - i", sqrt_val/ (2 * a))  # Driver Programa = 1b = -7c = 12 # Function callfindRoots(a, b, c) # This code is contributed by Sharad Bhardwaj.
// C# program to find roots// of a quadratic equationusing System; class Quadratic {     // Prints roots of quadratic    // equation ax * 2 + bx + x    void findRoots(int a, int b, int c)    {         // If a is 0, then equation is        // not quadratic, but linear         if (a == 0) {            Console.Write("Invalid");            return;        }         int d = b * b - 4 * a * c;        double sqrt_val = Math.Abs(d);         if (d > 0) {            Console.Write(                "Roots are real and different \n");             Console.Write(                (double)(-b + sqrt_val) / (2 * a) + "\n"                + (double)(-b - sqrt_val) / (2 * a));        }         // d < 0        else {            Console.Write("Roots are complex \n");             Console.Write(-(double)b / (2 * a) + " + i"                          + sqrt_val / (2 * a)  + "\n"                          + -(double)b / (2 * a) + " - i"                          + sqrt_val / (2 * a) );        }    }     // Driver code    public static void Main()    {        Quadratic obj = new Quadratic();        int a = 1, b = -7, c = 12;               // Function call        obj.findRoots(a, b, c);    }} // This code is contributed by nitin mittal.
<?php// PHP program to find roots// of a quadratic equation // Prints roots of quadratic// equation ax*2 + bx + xfunction findRoots($a, $b, $c){    // If a is 0, then equation is    // not quadratic, but linear    if ($a == 0)    {        echo "Invalid";        return;    }     $d = $b * $b - 4 * $a * $c;    $sqrt_val = sqrt(abs($d));     if ($d > 0)    {        echo "Roots are real and ".                    "different \n";        echo (-$b + $sqrt_val) / (2 * $a) , "\n",             (-$b - $sqrt_val) / (2 * $a);    }    else if ($d == 0)    {        echo "Roots are real and same \n";        echo -$b / (2 * $a);    }         // d < 0    else    {        echo "Roots are complex \n";        echo -$b / (2 * $a) , " + i" ,              $sqrt_val / (2 * $a) , "\n" , -$b / (2 * $a),                             " - i", $sqrt_val / (2 * $a) ;    }} // Driver code$a = 1; $b = -7 ;$c = 12; // Function callfindRoots($a, $b, $c); // This code is contributed// by nitin mittal.?>
<script> // JavaScript program to find roots// of a quadratic equation     // Prints roots of quadratic    // equation ax * 2 + bx + x    function findRoots(a, b, c)    {        // If a is 0, then equation is not        // quadratic, but linear          if (a == 0) {            document.write("Invalid");            return;        }          let d = b * b - 4 * a * c;        let sqrt_val = Math.sqrt(Math.abs(d));          if (d > 0) {            document.write(                "Roots are real and different \n" + "<br/>");              document.write(                (-b + sqrt_val) / (2 * a) + "<br/>"                + (-b - sqrt_val) / (2 * a));        }        else if (d == 0) {            document.write(                "Roots are real and same \n" + "<br/>");              document.write(-b / (2 * a) + "<br/>"                               + -b / (2 * a)) ;        }        else // d < 0        {            document.write("Roots are complex \n");              document.write(-b / (2 * a) + " + i"                               + sqrt_val / (2 * a)  + "<br/>"                               + -b / (2 * a)                               + " - i" + sqrt_val) / (2 * a) ;        }    } // Driver Code         let a = 1, b = -7, c = 12;                // Function call        findRoots(a, b, c); </script>
Roots are real and different 
4.000000
3.000000
Time Complexity: O(log(D)), where D is the discriminant of the given quadratic equation.Auxiliary Space: O(1)
This article is contributed by Dheeraj Gupta. Please write comments if you find anything incorrect, or hare more information about the topic discussed above. 
nitin mittal
RishabhPrabhu
mysumymysaim
chinmoy1997pal
rameshta
laphamkienanh19
harendrakumar123
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.