The Algorithms logo
The Algorithms
AboutDonate

Quadratic Roots

/**
 * @see https://www.cuemath.com/algebra/roots-of-quadratic-equation/
 * @author Dibya Debayan Dash
 * Calculates the roots of a quadratic equation of the form ax^2 + bx + c = 0.
 *
 * @param {number} a - Coefficient of x^2.
 * @param {number} b - Coefficient of x.
 * @param {number} c - Constant term.
 * @returns {number[]} - An array containing the roots if they are real,
 *                      or an empty array indicating no real roots.
 *
 * @example
 * // Find the roots of the quadratic equation: 2x^2 - 4x + 2 = 0
 * const roots = quadraticRoots(2, -4, 2);
 * // Expected output: [1]
 */
const quadraticRoots = (a, b, c) => {
  // Calculate the discriminant
  const discriminant = b * b - 4 * a * c

  // Check if roots are real
  if (discriminant < 0) {
    return []
  } else if (discriminant === 0) {
    // One real root
    return [-b / (2 * a)]
  } else {
    // Two real roots
    const sqrtDiscriminant = Math.sqrt(discriminant)
    return [
      (-b + sqrtDiscriminant) / (2 * a),
      (-b - sqrtDiscriminant) / (2 * a)
    ]
  }
}

export { quadraticRoots }