Average Error: 35.6 → 31.3
Time: 31.4s
Precision: 64
\[\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\]
\[\begin{array}{l} \mathbf{if}\;g \le -5.401023155583567976051803909194293242719 \cdot 10^{-158}:\\ \;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h} + \left(-g\right)} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\\ \mathbf{else}:\\ \;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - g} + \sqrt[3]{\left(\sqrt{g \cdot g - h \cdot h} + \left(-g\right)\right) \cdot \frac{1}{2 \cdot a}}\\ \end{array}\]
\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}
\begin{array}{l}
\mathbf{if}\;g \le -5.401023155583567976051803909194293242719 \cdot 10^{-158}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h} + \left(-g\right)} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\\

\mathbf{else}:\\
\;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - g} + \sqrt[3]{\left(\sqrt{g \cdot g - h \cdot h} + \left(-g\right)\right) \cdot \frac{1}{2 \cdot a}}\\

\end{array}
double f(double g, double h, double a) {
        double r6259327 = 1.0;
        double r6259328 = 2.0;
        double r6259329 = a;
        double r6259330 = r6259328 * r6259329;
        double r6259331 = r6259327 / r6259330;
        double r6259332 = g;
        double r6259333 = -r6259332;
        double r6259334 = r6259332 * r6259332;
        double r6259335 = h;
        double r6259336 = r6259335 * r6259335;
        double r6259337 = r6259334 - r6259336;
        double r6259338 = sqrt(r6259337);
        double r6259339 = r6259333 + r6259338;
        double r6259340 = r6259331 * r6259339;
        double r6259341 = cbrt(r6259340);
        double r6259342 = r6259333 - r6259338;
        double r6259343 = r6259331 * r6259342;
        double r6259344 = cbrt(r6259343);
        double r6259345 = r6259341 + r6259344;
        return r6259345;
}

double f(double g, double h, double a) {
        double r6259346 = g;
        double r6259347 = -5.401023155583568e-158;
        bool r6259348 = r6259346 <= r6259347;
        double r6259349 = 1.0;
        double r6259350 = 2.0;
        double r6259351 = a;
        double r6259352 = r6259350 * r6259351;
        double r6259353 = r6259349 / r6259352;
        double r6259354 = cbrt(r6259353);
        double r6259355 = r6259346 * r6259346;
        double r6259356 = h;
        double r6259357 = r6259356 * r6259356;
        double r6259358 = r6259355 - r6259357;
        double r6259359 = sqrt(r6259358);
        double r6259360 = -r6259346;
        double r6259361 = r6259359 + r6259360;
        double r6259362 = cbrt(r6259361);
        double r6259363 = r6259354 * r6259362;
        double r6259364 = r6259360 - r6259359;
        double r6259365 = r6259353 * r6259364;
        double r6259366 = cbrt(r6259365);
        double r6259367 = r6259363 + r6259366;
        double r6259368 = r6259360 - r6259346;
        double r6259369 = cbrt(r6259368);
        double r6259370 = r6259354 * r6259369;
        double r6259371 = r6259361 * r6259353;
        double r6259372 = cbrt(r6259371);
        double r6259373 = r6259370 + r6259372;
        double r6259374 = r6259348 ? r6259367 : r6259373;
        return r6259374;
}

Error

Bits error versus g

Bits error versus h

Bits error versus a

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Derivation

  1. Split input into 2 regimes
  2. if g < -5.401023155583568e-158

    1. Initial program 34.7

      \[\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\]
    2. Using strategy rm
    3. Applied cbrt-prod31.2

      \[\leadsto \color{blue}{\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) + \sqrt{g \cdot g - h \cdot h}}} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\]

    if -5.401023155583568e-158 < g

    1. Initial program 36.4

      \[\sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\]
    2. Using strategy rm
    3. Applied cbrt-prod32.8

      \[\leadsto \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \color{blue}{\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \sqrt{g \cdot g - h \cdot h}}}\]
    4. Taylor expanded around inf 31.5

      \[\leadsto \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) + \sqrt{g \cdot g - h \cdot h}\right)} + \sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - \color{blue}{g}}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification31.3

    \[\leadsto \begin{array}{l} \mathbf{if}\;g \le -5.401023155583567976051803909194293242719 \cdot 10^{-158}:\\ \;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\sqrt{g \cdot g - h \cdot h} + \left(-g\right)} + \sqrt[3]{\frac{1}{2 \cdot a} \cdot \left(\left(-g\right) - \sqrt{g \cdot g - h \cdot h}\right)}\\ \mathbf{else}:\\ \;\;\;\;\sqrt[3]{\frac{1}{2 \cdot a}} \cdot \sqrt[3]{\left(-g\right) - g} + \sqrt[3]{\left(\sqrt{g \cdot g - h \cdot h} + \left(-g\right)\right) \cdot \frac{1}{2 \cdot a}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019192 +o rules:numerics
(FPCore (g h a)
  :name "2-ancestry mixing, positive discriminant"
  (+ (cbrt (* (/ 1.0 (* 2.0 a)) (+ (- g) (sqrt (- (* g g) (* h h)))))) (cbrt (* (/ 1.0 (* 2.0 a)) (- (- g) (sqrt (- (* g g) (* h h))))))))