Average Error: 33.8 → 9.1
Time: 20.1s
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 -1.970010565552108757188050455448622102575 \cdot 10^{58}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le -1.341090161490938310878248498686683235407 \cdot 10^{-308}:\\ \;\;\;\;\frac{\frac{\left(a \cdot c\right) \cdot 4}{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} - b}}{a \cdot 2}\\ \mathbf{elif}\;b \le 3.628799960716311990444092539387346352569 \cdot 10^{50}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}{a \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;\frac{b}{a} \cdot -1\\ \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 -1.970010565552108757188050455448622102575 \cdot 10^{58}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

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

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

\end{array}
double f(double a, double b, double c) {
        double r4704593 = b;
        double r4704594 = -r4704593;
        double r4704595 = r4704593 * r4704593;
        double r4704596 = 4.0;
        double r4704597 = a;
        double r4704598 = c;
        double r4704599 = r4704597 * r4704598;
        double r4704600 = r4704596 * r4704599;
        double r4704601 = r4704595 - r4704600;
        double r4704602 = sqrt(r4704601);
        double r4704603 = r4704594 - r4704602;
        double r4704604 = 2.0;
        double r4704605 = r4704604 * r4704597;
        double r4704606 = r4704603 / r4704605;
        return r4704606;
}

double f(double a, double b, double c) {
        double r4704607 = b;
        double r4704608 = -1.9700105655521088e+58;
        bool r4704609 = r4704607 <= r4704608;
        double r4704610 = -1.0;
        double r4704611 = c;
        double r4704612 = r4704611 / r4704607;
        double r4704613 = r4704610 * r4704612;
        double r4704614 = -1.3410901614909383e-308;
        bool r4704615 = r4704607 <= r4704614;
        double r4704616 = a;
        double r4704617 = r4704616 * r4704611;
        double r4704618 = 4.0;
        double r4704619 = r4704617 * r4704618;
        double r4704620 = r4704607 * r4704607;
        double r4704621 = r4704620 - r4704619;
        double r4704622 = sqrt(r4704621);
        double r4704623 = r4704622 - r4704607;
        double r4704624 = r4704619 / r4704623;
        double r4704625 = 2.0;
        double r4704626 = r4704616 * r4704625;
        double r4704627 = r4704624 / r4704626;
        double r4704628 = 3.628799960716312e+50;
        bool r4704629 = r4704607 <= r4704628;
        double r4704630 = -r4704607;
        double r4704631 = r4704630 - r4704622;
        double r4704632 = r4704631 / r4704626;
        double r4704633 = r4704607 / r4704616;
        double r4704634 = r4704633 * r4704610;
        double r4704635 = r4704629 ? r4704632 : r4704634;
        double r4704636 = r4704615 ? r4704627 : r4704635;
        double r4704637 = r4704609 ? r4704613 : r4704636;
        return r4704637;
}

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.8
Target20.7
Herbie9.1
\[\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 4 regimes
  2. if b < -1.9700105655521088e+58

    1. Initial program 57.5

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

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

    if -1.9700105655521088e+58 < b < -1.3410901614909383e-308

    1. Initial program 29.3

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

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

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

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

    if -1.3410901614909383e-308 < b < 3.628799960716312e+50

    1. Initial program 9.7

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

    if 3.628799960716312e+50 < b

    1. Initial program 38.2

      \[\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-num38.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -1.970010565552108757188050455448622102575 \cdot 10^{58}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le -1.341090161490938310878248498686683235407 \cdot 10^{-308}:\\ \;\;\;\;\frac{\frac{\left(a \cdot c\right) \cdot 4}{\sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4} - b}}{a \cdot 2}\\ \mathbf{elif}\;b \le 3.628799960716311990444092539387346352569 \cdot 10^{50}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(a \cdot c\right) \cdot 4}}{a \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;\frac{b}{a} \cdot -1\\ \end{array}\]

Reproduce

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

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

  (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))