Average Error: 19.3 → 12.4
Time: 21.7s
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 5.03307751825146 \cdot 10^{+142}:\\ \;\;\;\;\begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \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)}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}{2}}{a}\\ \end{array}\\ \mathbf{elif}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - b}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}}{2}}{a} \cdot \sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}\\ \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 5.03307751825146 \cdot 10^{+142}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \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)}}}\\

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

\end{array}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r898465 = b;
        double r898466 = 0.0;
        bool r898467 = r898465 >= r898466;
        double r898468 = 2.0;
        double r898469 = c;
        double r898470 = r898468 * r898469;
        double r898471 = -r898465;
        double r898472 = r898465 * r898465;
        double r898473 = 4.0;
        double r898474 = a;
        double r898475 = r898473 * r898474;
        double r898476 = r898475 * r898469;
        double r898477 = r898472 - r898476;
        double r898478 = sqrt(r898477);
        double r898479 = r898471 - r898478;
        double r898480 = r898470 / r898479;
        double r898481 = r898471 + r898478;
        double r898482 = r898468 * r898474;
        double r898483 = r898481 / r898482;
        double r898484 = r898467 ? r898480 : r898483;
        return r898484;
}

double f(double a, double b, double c) {
        double r898485 = b;
        double r898486 = 5.03307751825146e+142;
        bool r898487 = r898485 <= r898486;
        double r898488 = 0.0;
        bool r898489 = r898485 >= r898488;
        double r898490 = 2.0;
        double r898491 = c;
        double r898492 = r898490 * r898491;
        double r898493 = -r898485;
        double r898494 = a;
        double r898495 = -4.0;
        double r898496 = r898495 * r898491;
        double r898497 = r898485 * r898485;
        double r898498 = fma(r898494, r898496, r898497);
        double r898499 = sqrt(r898498);
        double r898500 = sqrt(r898499);
        double r898501 = r898500 * r898500;
        double r898502 = r898493 - r898501;
        double r898503 = r898492 / r898502;
        double r898504 = r898499 - r898485;
        double r898505 = r898504 / r898490;
        double r898506 = r898505 / r898494;
        double r898507 = r898489 ? r898503 : r898506;
        double r898508 = r898493 - r898485;
        double r898509 = r898492 / r898508;
        double r898510 = sqrt(r898504);
        double r898511 = r898510 / r898490;
        double r898512 = r898511 / r898494;
        double r898513 = r898512 * r898510;
        double r898514 = r898489 ? r898509 : r898513;
        double r898515 = r898487 ? r898507 : r898514;
        return r898515;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 2 regimes
  2. if b < 5.03307751825146e+142

    1. Initial program 15.1

      \[\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. Simplified15.1

      \[\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-sqrt15.1

      \[\leadsto \begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{\color{blue}{\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)}}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}{2}}{a}\\ \end{array}\]
    5. Applied sqrt-prod15.2

      \[\leadsto \begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \color{blue}{\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)}}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}{2}}{a}\\ \end{array}\]

    if 5.03307751825146e+142 < b

    1. Initial program 35.8

      \[\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. Simplified35.7

      \[\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 1.6

      \[\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}\]
    4. Using strategy rm
    5. Applied *-un-lft-identity1.6

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

      \[\leadsto \begin{array}{l} \mathbf{if}\;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}{1 \cdot 2}}{1 \cdot a}\\ \end{array}\]
    7. Applied add-sqr-sqrt1.6

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

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

      \[\leadsto \begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - b}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}}{1}}{1} \cdot \frac{\frac{\sqrt{\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 simplification12.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le 5.03307751825146 \cdot 10^{+142}:\\ \;\;\;\;\begin{array}{l} \mathbf{if}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \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)}}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}{2}}{a}\\ \end{array}\\ \mathbf{elif}\;b \ge 0:\\ \;\;\;\;\frac{2 \cdot c}{\left(-b\right) - b}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}}{2}}{a} \cdot \sqrt{\sqrt{\mathsf{fma}\left(a, -4 \cdot c, b \cdot b\right)} - b}\\ \end{array}\]

Reproduce

herbie shell --seed 2019165 +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))))