From f271a2cae01c5733b6cb67231157d25c38318527 Mon Sep 17 00:00:00 2001 From: Dibya12345 <48878439+Dibya12345@users.noreply.github.com> Date: Mon, 2 Oct 2023 12:42:39 +0530 Subject: [PATCH] Added QuadraticRoots to Math/QuadraticRoots.js (#1376) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added QuadraticRoots in the Math/QuadraticRoots * Fixed math/QyadraticRoots var to let * Added relevant links math/QyadraticRoots * Added relevant links math/QyadraticRoots and fixed let - const * Added the changes and @see notation in Math/QuadraticRoots.js * Added the changes Math/QuadraticRoots.js and return an empty [] * Readd describe block, remove redundant comments * Changed [1,1] to [1] --------- Co-authored-by: Dibya Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com> --- Maths/QuadraticRoots.js | 37 +++++++++++++++++++++++++++++++ Maths/test/QuadraticRoots.test.js | 13 +++++++++++ 2 files changed, 50 insertions(+) create mode 100644 Maths/QuadraticRoots.js create mode 100644 Maths/test/QuadraticRoots.test.js diff --git a/Maths/QuadraticRoots.js b/Maths/QuadraticRoots.js new file mode 100644 index 000000000..a6b52cf1a --- /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 000000000..bd0db43c1 --- /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([]) + }) +})