Average Error: 34.4 → 10.2
Time: 7.7s
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 -9.66568096049333791 \cdot 10^{-39}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 1.96400887454670113 \cdot 10^{84}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{b}{a}\\ \end{array}\]
\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 -9.66568096049333791 \cdot 10^{-39}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

\mathbf{elif}\;b \le 1.96400887454670113 \cdot 10^{84}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\

\mathbf{else}:\\
\;\;\;\;-1 \cdot \frac{b}{a}\\

\end{array}
double f(double a, double b, double c) {
        double r81404 = b;
        double r81405 = -r81404;
        double r81406 = r81404 * r81404;
        double r81407 = 4.0;
        double r81408 = a;
        double r81409 = c;
        double r81410 = r81408 * r81409;
        double r81411 = r81407 * r81410;
        double r81412 = r81406 - r81411;
        double r81413 = sqrt(r81412);
        double r81414 = r81405 - r81413;
        double r81415 = 2.0;
        double r81416 = r81415 * r81408;
        double r81417 = r81414 / r81416;
        return r81417;
}

double f(double a, double b, double c) {
        double r81418 = b;
        double r81419 = -9.665680960493338e-39;
        bool r81420 = r81418 <= r81419;
        double r81421 = -1.0;
        double r81422 = c;
        double r81423 = r81422 / r81418;
        double r81424 = r81421 * r81423;
        double r81425 = 1.964008874546701e+84;
        bool r81426 = r81418 <= r81425;
        double r81427 = -r81418;
        double r81428 = r81418 * r81418;
        double r81429 = 4.0;
        double r81430 = a;
        double r81431 = r81430 * r81422;
        double r81432 = r81429 * r81431;
        double r81433 = r81428 - r81432;
        double r81434 = sqrt(r81433);
        double r81435 = r81427 - r81434;
        double r81436 = 2.0;
        double r81437 = r81436 * r81430;
        double r81438 = r81435 / r81437;
        double r81439 = r81418 / r81430;
        double r81440 = r81421 * r81439;
        double r81441 = r81426 ? r81438 : r81440;
        double r81442 = r81420 ? r81424 : r81441;
        return r81442;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original34.4
Target21.3
Herbie10.2
\[\begin{array}{l} \mathbf{if}\;b \lt 0.0:\\ \;\;\;\;\frac{c}{a \cdot \frac{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}}\\ \mathbf{else}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if b < -9.665680960493338e-39

    1. Initial program 55.2

      \[\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\]
    2. Taylor expanded around -inf 6.9

      \[\leadsto \color{blue}{-1 \cdot \frac{c}{b}}\]

    if -9.665680960493338e-39 < b < 1.964008874546701e+84

    1. Initial program 14.7

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

    if 1.964008874546701e+84 < b

    1. Initial program 44.4

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

      \[\leadsto \color{blue}{\frac{1}{\frac{2 \cdot a}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}}\]
    4. Taylor expanded around 0 4.8

      \[\leadsto \color{blue}{-1 \cdot \frac{b}{a}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification10.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -9.66568096049333791 \cdot 10^{-39}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 1.96400887454670113 \cdot 10^{84}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;-1 \cdot \frac{b}{a}\\ \end{array}\]

Reproduce

herbie shell --seed 2020042 +o rules:numerics
(FPCore (a b c)
  :name "quadm (p42, negative)"
  :precision binary64

  :herbie-target
  (if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))

  (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))