Average Error: 33.8 → 9.9
Time: 21.6s
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 -3.8424248185280593 \cdot 10^{-34}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 9.6230204738986831 \cdot 10^{86}:\\ \;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{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 -3.8424248185280593 \cdot 10^{-34}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r99570 = b;
        double r99571 = -r99570;
        double r99572 = r99570 * r99570;
        double r99573 = 4.0;
        double r99574 = a;
        double r99575 = c;
        double r99576 = r99574 * r99575;
        double r99577 = r99573 * r99576;
        double r99578 = r99572 - r99577;
        double r99579 = sqrt(r99578);
        double r99580 = r99571 - r99579;
        double r99581 = 2.0;
        double r99582 = r99581 * r99574;
        double r99583 = r99580 / r99582;
        return r99583;
}

double f(double a, double b, double c) {
        double r99584 = b;
        double r99585 = -3.8424248185280593e-34;
        bool r99586 = r99584 <= r99585;
        double r99587 = -1.0;
        double r99588 = c;
        double r99589 = r99588 / r99584;
        double r99590 = r99587 * r99589;
        double r99591 = 9.623020473898683e+86;
        bool r99592 = r99584 <= r99591;
        double r99593 = -r99584;
        double r99594 = r99584 * r99584;
        double r99595 = 4.0;
        double r99596 = a;
        double r99597 = r99596 * r99588;
        double r99598 = r99595 * r99597;
        double r99599 = r99594 - r99598;
        double r99600 = sqrt(r99599);
        double r99601 = r99593 - r99600;
        double r99602 = 1.0;
        double r99603 = 2.0;
        double r99604 = r99603 * r99596;
        double r99605 = r99602 / r99604;
        double r99606 = r99601 * r99605;
        double r99607 = r99584 / r99596;
        double r99608 = r99587 * r99607;
        double r99609 = r99592 ? r99606 : r99608;
        double r99610 = r99586 ? r99590 : r99609;
        return r99610;
}

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
Target21.0
Herbie9.9
\[\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 < -3.8424248185280593e-34

    1. Initial program 54.2

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

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

    if -3.8424248185280593e-34 < b < 9.623020473898683e+86

    1. Initial program 13.9

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

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

    if 9.623020473898683e+86 < b

    1. Initial program 45.6

      \[\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-num45.6

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

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

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

Reproduce

herbie shell --seed 2019199 +o rules:numerics
(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)))