function original(a3, a2, a1, a0) {
  const a3Squared = a3 * a3;

  const p = a2 - (3.0 * a3Squared) / 8.0;
  const q = a1 - (a2 * a3) / 2.0 + (a3Squared * a3) / 8.0;
  const r =
    a0 -
    (a1 * a3) / 4.0 +
    (a2 * a3Squared) / 16.0 -
    (3.0 * a3Squared * a3Squared) / 256.0;

  // Find the roots of the cubic equations:  h^6 + 2 p h^4 + (p^2 - 4 r) h^2 - q^2 = 0.
  const cubicRoots = CubicRealPolynomial.computeRealRoots(
    1.0,
    2.0 * p,
    p * p - 4.0 * r,
    -q * q,
  );

  if (cubicRoots.length > 0) {
    const temp = -a3 / 4.0;

    // Use the largest positive root.
    const hSquared = cubicRoots[cubicRoots.length - 1];

    if (Math.abs(hSquared) < CesiumMath.EPSILON14) {
      // y^4 + p y^2 + r = 0.
      const roots = QuadraticRealPolynomial.computeRealRoots(1.0, p, r);

      if (roots.length === 2) {
        const root0 = roots[0];
        const root1 = roots[1];

        let y;
        if (root0 >= 0.0 && root1 >= 0.0) {
          const y0 = Math.sqrt(root0);
          const y1 = Math.sqrt(root1);

          return [temp - y1, temp - y0, temp + y0, temp + y1];
        } else if (root0 >= 0.0 && root1 < 0.0) {
          y = Math.sqrt(root0);
          return [temp - y, temp + y];
        } else if (root0 < 0.0 && root1 >= 0.0) {
          y = Math.sqrt(root1);
          return [temp - y, temp + y];
        }
      }
      return [];
    } else if (hSquared > 0.0) {
      const h = Math.sqrt(hSquared);

      const m = (p + hSquared - q / h) / 2.0;
      const n = (p + hSquared + q / h) / 2.0;

      // Now solve the two quadratic factors:  (y^2 + h y + m)(y^2 - h y + n);
      const roots1 = QuadraticRealPolynomial.computeRealRoots(1.0, h, m);
      const roots2 = QuadraticRealPolynomial.computeRealRoots(1.0, -h, n);

      if (roots1.length !== 0) {
        roots1[0] += temp;
        roots1[1] += temp;

        if (roots2.length !== 0) {
          roots2[0] += temp;
          roots2[1] += temp;

          if (roots1[1] <= roots2[0]) {
            return [roots1[0], roots1[1], roots2[0], roots2[1]];
          } else if (roots2[1] <= roots1[0]) {
            return [roots2[0], roots2[1], roots1[0], roots1[1]];
          } else if (roots1[0] >= roots2[0] && roots1[1] <= roots2[1]) {
            return [roots2[0], roots1[0], roots1[1], roots2[1]];
          } else if (roots2[0] >= roots1[0] && roots2[1] <= roots1[1]) {
            return [roots1[0], roots2[0], roots2[1], roots1[1]];
          } else if (roots1[0] > roots2[0] && roots1[0] < roots2[1]) {
            return [roots2[0], roots1[0], roots2[1], roots1[1]];
          }
          return [roots1[0], roots2[0], roots1[1], roots2[1]];
        }
        return roots1;
      }

      if (roots2.length !== 0) {
        roots2[0] += temp;
        roots2[1] += temp;

        return roots2;
      }
      return [];
    }
  }
  return [];
}
Provides the discriminant of the quartic equation from the supplied coefficients.

@param {number} a The coefficient of the 4th order monomial.
@param {number} b The coefficient of the 3rd order monomial.
@param {number} c The coefficient of the 2nd order monomial.
@param {number} d The coefficient of the 1st order monomial.
@param {number} e The coefficient of the 0th order monomial.
@returns {number} The value of the discriminant.