diff --git a/Maths/QuadraticRoots.js b/Maths/QuadraticRoots.js new file mode 100644 index 0000000000..a6b52cf1a9 --- /dev/null +++ b/Maths/QuadraticRoots.js @@ -0,0 +1,37 @@ +/** + * @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 } diff --git a/Maths/test/QuadraticRoots.test.js b/Maths/test/QuadraticRoots.test.js new file mode 100644 index 0000000000..bd0db43c15 --- /dev/null +++ b/Maths/test/QuadraticRoots.test.js @@ -0,0 +1,13 @@ +import { quadraticRoots } from '../QuadraticRoots.js' + +describe('quadratic roots', () => { + it('returns an array with two real roots when the discriminant is positive', () => { + expect(quadraticRoots(1, -3, 2)).toEqual([2, 1]) + }) + it('returns an array with one real root when the discriminant is zero', () => { + expect(quadraticRoots(1, -2, 1)).toEqual([1]) + }) + it('returns an empty array indicating no real roots when the discriminant is negative', () => { + expect(quadraticRoots(1, 2, 5)).toEqual([]) + }) +})