Average Error: 33.0 → 10.8
Time: 15.5s
Precision: 64
\[\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\]
\[\begin{array}{l} \mathbf{if}\;b \le -2.9862044966069494 \cdot 10^{+41}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le 1.990519652731023 \cdot 10^{-106}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{\left(c \cdot a\right) \cdot -4 + b \cdot b}}{a \cdot 2}\\ \mathbf{elif}\;b \le 1.0350377446088803 \cdot 10^{-69}:\\ \;\;\;\;-\frac{c}{b}\\ \mathbf{elif}\;b \le 3.325219738594455 \cdot 10^{-21}:\\ \;\;\;\;\frac{\frac{b \cdot b - \left(\left(c \cdot a\right) \cdot -4 + b \cdot b\right)}{\left(-b\right) - \sqrt{\left(c \cdot a\right) \cdot -4 + b \cdot b}}}{a \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \end{array}\]
\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}
\begin{array}{l}
\mathbf{if}\;b \le -2.9862044966069494 \cdot 10^{+41}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\

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

\mathbf{elif}\;b \le 1.0350377446088803 \cdot 10^{-69}:\\
\;\;\;\;-\frac{c}{b}\\

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

\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\

\end{array}
double f(double a, double b, double c) {
        double r5413517 = b;
        double r5413518 = -r5413517;
        double r5413519 = r5413517 * r5413517;
        double r5413520 = 4.0;
        double r5413521 = a;
        double r5413522 = r5413520 * r5413521;
        double r5413523 = c;
        double r5413524 = r5413522 * r5413523;
        double r5413525 = r5413519 - r5413524;
        double r5413526 = sqrt(r5413525);
        double r5413527 = r5413518 + r5413526;
        double r5413528 = 2.0;
        double r5413529 = r5413528 * r5413521;
        double r5413530 = r5413527 / r5413529;
        return r5413530;
}

double f(double a, double b, double c) {
        double r5413531 = b;
        double r5413532 = -2.9862044966069494e+41;
        bool r5413533 = r5413531 <= r5413532;
        double r5413534 = c;
        double r5413535 = r5413534 / r5413531;
        double r5413536 = a;
        double r5413537 = r5413531 / r5413536;
        double r5413538 = r5413535 - r5413537;
        double r5413539 = 1.990519652731023e-106;
        bool r5413540 = r5413531 <= r5413539;
        double r5413541 = -r5413531;
        double r5413542 = r5413534 * r5413536;
        double r5413543 = -4.0;
        double r5413544 = r5413542 * r5413543;
        double r5413545 = r5413531 * r5413531;
        double r5413546 = r5413544 + r5413545;
        double r5413547 = sqrt(r5413546);
        double r5413548 = r5413541 + r5413547;
        double r5413549 = 2.0;
        double r5413550 = r5413536 * r5413549;
        double r5413551 = r5413548 / r5413550;
        double r5413552 = 1.0350377446088803e-69;
        bool r5413553 = r5413531 <= r5413552;
        double r5413554 = -r5413535;
        double r5413555 = 3.325219738594455e-21;
        bool r5413556 = r5413531 <= r5413555;
        double r5413557 = r5413545 - r5413546;
        double r5413558 = r5413541 - r5413547;
        double r5413559 = r5413557 / r5413558;
        double r5413560 = r5413559 / r5413550;
        double r5413561 = r5413556 ? r5413560 : r5413554;
        double r5413562 = r5413553 ? r5413554 : r5413561;
        double r5413563 = r5413540 ? r5413551 : r5413562;
        double r5413564 = r5413533 ? r5413538 : r5413563;
        return r5413564;
}

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

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

Derivation

  1. Split input into 4 regimes
  2. if b < -2.9862044966069494e+41

    1. Initial program 34.1

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

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

    if -2.9862044966069494e+41 < b < 1.990519652731023e-106

    1. Initial program 12.8

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

      \[\leadsto \frac{\left(-b\right) + \sqrt{\color{blue}{{b}^{2} - 4 \cdot \left(a \cdot c\right)}}}{2 \cdot a}\]
    3. Simplified12.8

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

    if 1.990519652731023e-106 < b < 1.0350377446088803e-69 or 3.325219738594455e-21 < b

    1. Initial program 53.1

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

      \[\leadsto \color{blue}{-1 \cdot \frac{c}{b}}\]
    3. Simplified8.7

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

    if 1.0350377446088803e-69 < b < 3.325219738594455e-21

    1. Initial program 35.7

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

      \[\leadsto \frac{\left(-b\right) + \sqrt{\color{blue}{{b}^{2} - 4 \cdot \left(a \cdot c\right)}}}{2 \cdot a}\]
    3. Simplified35.5

      \[\leadsto \frac{\left(-b\right) + \sqrt{\color{blue}{\left(a \cdot c\right) \cdot -4 + b \cdot b}}}{2 \cdot a}\]
    4. Using strategy rm
    5. Applied flip-+35.6

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -2.9862044966069494 \cdot 10^{+41}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le 1.990519652731023 \cdot 10^{-106}:\\ \;\;\;\;\frac{\left(-b\right) + \sqrt{\left(c \cdot a\right) \cdot -4 + b \cdot b}}{a \cdot 2}\\ \mathbf{elif}\;b \le 1.0350377446088803 \cdot 10^{-69}:\\ \;\;\;\;-\frac{c}{b}\\ \mathbf{elif}\;b \le 3.325219738594455 \cdot 10^{-21}:\\ \;\;\;\;\frac{\frac{b \cdot b - \left(\left(c \cdot a\right) \cdot -4 + b \cdot b\right)}{\left(-b\right) - \sqrt{\left(c \cdot a\right) \cdot -4 + b \cdot b}}}{a \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \end{array}\]

Reproduce

herbie shell --seed 2019164 
(FPCore (a b c)
  :name "The quadratic formula (r1)"

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

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