Average Error: 20.0 → 13.4
Time: 21.9s
Precision: 64
\[\begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\ \end{array}\]
\[\begin{array}{l} \mathbf{if}\;b \le 1.3914912380743042 \cdot 10^{+88}:\\ \;\;\;\;\begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}, -b\right)}{2}}{a}\\ \end{array}\\ \mathbf{elif}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - b}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}{2}}{a}\\ \end{array}\]
\begin{array}{l}
\mathbf{if}\;b \ge 0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\

\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\

\end{array}
\begin{array}{l}
\mathbf{if}\;b \le 1.3914912380743042 \cdot 10^{+88}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}, -b\right)}{2}}{a}\\

\end{array}\\

\mathbf{elif}\;b \ge 0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - b}\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}{2}}{a}\\

\end{array}
double f(double a, double b, double c) {
        double r1114409 = b;
        double r1114410 = 0.0;
        bool r1114411 = r1114409 >= r1114410;
        double r1114412 = 2.0;
        double r1114413 = c;
        double r1114414 = r1114412 * r1114413;
        double r1114415 = -r1114409;
        double r1114416 = r1114409 * r1114409;
        double r1114417 = 4.0;
        double r1114418 = a;
        double r1114419 = r1114417 * r1114418;
        double r1114420 = r1114419 * r1114413;
        double r1114421 = r1114416 - r1114420;
        double r1114422 = sqrt(r1114421);
        double r1114423 = r1114415 - r1114422;
        double r1114424 = r1114414 / r1114423;
        double r1114425 = r1114415 + r1114422;
        double r1114426 = r1114412 * r1114418;
        double r1114427 = r1114425 / r1114426;
        double r1114428 = r1114411 ? r1114424 : r1114427;
        return r1114428;
}

double f(double a, double b, double c) {
        double r1114429 = b;
        double r1114430 = 1.3914912380743042e+88;
        bool r1114431 = r1114429 <= r1114430;
        double r1114432 = 0.0;
        bool r1114433 = r1114429 >= r1114432;
        double r1114434 = 2.0;
        double r1114435 = c;
        double r1114436 = r1114434 * r1114435;
        double r1114437 = -r1114429;
        double r1114438 = a;
        double r1114439 = -4.0;
        double r1114440 = r1114439 * r1114435;
        double r1114441 = r1114429 * r1114429;
        double r1114442 = fma(r1114438, r1114440, r1114441);
        double r1114443 = sqrt(r1114442);
        double r1114444 = r1114437 - r1114443;
        double r1114445 = r1114436 / r1114444;
        double r1114446 = sqrt(r1114443);
        double r1114447 = fma(r1114446, r1114446, r1114437);
        double r1114448 = r1114447 / r1114434;
        double r1114449 = r1114448 / r1114438;
        double r1114450 = r1114433 ? r1114445 : r1114449;
        double r1114451 = r1114437 - r1114429;
        double r1114452 = r1114436 / r1114451;
        double r1114453 = r1114443 - r1114429;
        double r1114454 = r1114453 / r1114434;
        double r1114455 = r1114454 / r1114438;
        double r1114456 = r1114433 ? r1114452 : r1114455;
        double r1114457 = r1114431 ? r1114450 : r1114456;
        return r1114457;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 2 regimes
  2. if b < 1.3914912380743042e+88

    1. Initial program 16.9

      \[\begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\ \end{array}\]
    2. Simplified16.8

      \[\leadsto \color{blue}{\begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}{2}}{a}\\ \end{array}}\]
    3. Using strategy rm
    4. Applied add-sqr-sqrt16.8

      \[\leadsto \begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} \cdot \sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}} - b}{2}}{a}\\ \end{array}\]
    5. Applied sqrt-prod16.9

      \[\leadsto \begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}} \cdot \sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}} - b}{2}}{a}\\ \end{array}\]
    6. Applied fma-neg16.9

      \[\leadsto \begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}, -b\right)}{2}}{a}\\ \end{array}\]

    if 1.3914912380743042e+88 < b

    1. Initial program 29.4

      \[\begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\ \end{array}\]
    2. Simplified29.3

      \[\leadsto \color{blue}{\begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}{2}}{a}\\ \end{array}}\]
    3. Taylor expanded around 0 2.7

      \[\leadsto \begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \color{blue}{b}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}{2}}{a}\\ \end{array}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification13.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le 1.3914912380743042 \cdot 10^{+88}:\\ \;\;\;\;\begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)}}, -b\right)}{2}}{a}\\ \end{array}\\ \mathbf{elif}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - b}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}{2}}{a}\\ \end{array}\]

Reproduce

herbie shell --seed 2019163 +o rules:numerics
(FPCore (a b c)
  :name "jeff quadratic root 2"
  (if (>= b 0) (/ (* 2 c) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))))