Average Error: 1.6 → 0.6
Time: 20.9s
Precision: 64
\[\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;b \le -0.4461669921875:\\ \;\;\;\;\frac{\left(\left(-b\right) + b\right) \cdot \left(\left(-b\right) + \left(-b\right)\right) + 4 \cdot \left(a \cdot c\right)}{\left(2 \cdot a\right) \cdot \left(\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2}}{a}\\ \end{array}\]
double f(double a, double b, double c) {
        double r644533 = b;
        double r644534 = -r644533;
        double r644535 = r644533 * r644533;
        double r644536 = 4.0;
        double r644537 = a;
        double r644538 = c;
        double r644539 = r644537 * r644538;
        double r644540 = r644536 * r644539;
        double r644541 = r644535 - r644540;
        double r644542 = sqrt(r644541);
        double r644543 = r644534 - r644542;
        double r644544 = 2.0;
        double r644545 = r644544 * r644537;
        double r644546 = r644543 / r644545;
        return r644546;
}

double f(double a, double b, double c) {
        double r644547 = b;
        double r644548 = -0.4461669921875;
        bool r644549 = r644547 <= r644548;
        double r644550 = -r644547;
        double r644551 = r644550 + r644547;
        double r644552 = r644550 + r644550;
        double r644553 = r644551 * r644552;
        double r644554 = 4.0;
        double r644555 = a;
        double r644556 = c;
        double r644557 = r644555 * r644556;
        double r644558 = r644554 * r644557;
        double r644559 = r644553 + r644558;
        double r644560 = 2.0;
        double r644561 = r644560 * r644555;
        double r644562 = r644547 * r644547;
        double r644563 = r644562 - r644558;
        double r644564 = sqrt(r644563);
        double r644565 = r644550 + r644564;
        double r644566 = r644561 * r644565;
        double r644567 = r644559 / r644566;
        double r644568 = r644554 * r644555;
        double r644569 = r644568 * r644556;
        double r644570 = r644562 - r644569;
        double r644571 = sqrt(r644570);
        double r644572 = r644550 - r644571;
        double r644573 = r644572 / r644560;
        double r644574 = r644573 / r644555;
        double r644575 = r644549 ? r644567 : r644574;
        return r644575;
}

\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}
\begin{array}{l}
\mathbf{if}\;b \le -0.4461669921875:\\
\;\;\;\;\frac{\left(\left(-b\right) + b\right) \cdot \left(\left(-b\right) + \left(-b\right)\right) + 4 \cdot \left(a \cdot c\right)}{\left(2 \cdot a\right) \cdot \left(\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}\\

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

\end{array}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Derivation

  1. Split input into 2 regimes
  2. if b < -0.4461669921875

    1. Initial program 3.6

      \[\frac{\left(\left(-b\right) - \left(\sqrt{\left(\left(b \cdot b\right) - \left(\left(4\right) \cdot \left(a \cdot c\right)\right)\right)}\right)\right)}{\left(\left(2\right) \cdot a\right)}\]
    2. Using strategy rm
    3. Applied p16-flip--3.2

      \[\leadsto \frac{\color{blue}{\left(\frac{\left(\left(\left(-b\right) \cdot \left(-b\right)\right) - \left(\left(\sqrt{\left(\left(b \cdot b\right) - \left(\left(4\right) \cdot \left(a \cdot c\right)\right)\right)}\right) \cdot \left(\sqrt{\left(\left(b \cdot b\right) - \left(\left(4\right) \cdot \left(a \cdot c\right)\right)\right)}\right)\right)\right)}{\left(\frac{\left(-b\right)}{\left(\sqrt{\left(\left(b \cdot b\right) - \left(\left(4\right) \cdot \left(a \cdot c\right)\right)\right)}\right)}\right)}\right)}}{\left(\left(2\right) \cdot a\right)}\]
    4. Applied associate-/l/3.3

      \[\leadsto \color{blue}{\frac{\left(\left(\left(-b\right) \cdot \left(-b\right)\right) - \left(\left(\sqrt{\left(\left(b \cdot b\right) - \left(\left(4\right) \cdot \left(a \cdot c\right)\right)\right)}\right) \cdot \left(\sqrt{\left(\left(b \cdot b\right) - \left(\left(4\right) \cdot \left(a \cdot c\right)\right)\right)}\right)\right)\right)}{\left(\left(\left(2\right) \cdot a\right) \cdot \left(\frac{\left(-b\right)}{\left(\sqrt{\left(\left(b \cdot b\right) - \left(\left(4\right) \cdot \left(a \cdot c\right)\right)\right)}\right)}\right)\right)}}\]
    5. Simplified0.9

      \[\leadsto \frac{\color{blue}{\left(\frac{\left(\left(\frac{\left(-b\right)}{b}\right) \cdot \left(\frac{\left(-b\right)}{\left(-b\right)}\right)\right)}{\left(\left(4\right) \cdot \left(a \cdot c\right)\right)}\right)}}{\left(\left(\left(2\right) \cdot a\right) \cdot \left(\frac{\left(-b\right)}{\left(\sqrt{\left(\left(b \cdot b\right) - \left(\left(4\right) \cdot \left(a \cdot c\right)\right)\right)}\right)}\right)\right)}\]

    if -0.4461669921875 < b

    1. Initial program 0.5

      \[\frac{\left(\left(-b\right) - \left(\sqrt{\left(\left(b \cdot b\right) - \left(\left(4\right) \cdot \left(a \cdot c\right)\right)\right)}\right)\right)}{\left(\left(2\right) \cdot a\right)}\]
    2. Using strategy rm
    3. Applied associate-/r*0.5

      \[\leadsto \color{blue}{\frac{\left(\frac{\left(\left(-b\right) - \left(\sqrt{\left(\left(b \cdot b\right) - \left(\left(4\right) \cdot \left(a \cdot c\right)\right)\right)}\right)\right)}{\left(2\right)}\right)}{a}}\]
    4. Using strategy rm
    5. Applied associate-*r*0.5

      \[\leadsto \frac{\left(\frac{\left(\left(-b\right) - \left(\sqrt{\left(\left(b \cdot b\right) - \color{blue}{\left(\left(\left(4\right) \cdot a\right) \cdot c\right)}\right)}\right)\right)}{\left(2\right)}\right)}{a}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -0.4461669921875:\\ \;\;\;\;\frac{\left(\left(-b\right) + b\right) \cdot \left(\left(-b\right) + \left(-b\right)\right) + 4 \cdot \left(a \cdot c\right)}{\left(2 \cdot a\right) \cdot \left(\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2}}{a}\\ \end{array}\]

Reproduce

herbie shell --seed 2019102 +o rules:numerics
(FPCore (a b c)
  :name "quadm (p42, negative)"
  (/.p16 (-.p16 (neg.p16 b) (sqrt.p16 (-.p16 (*.p16 b b) (*.p16 (real->posit16 4) (*.p16 a c))))) (*.p16 (real->posit16 2) a)))