Average Error: 34.1 → 10.5
Time: 16.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 -9.332433396832084322962138528577137922234 \cdot 10^{-58}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 3.038903409991338138548211857189252856935 \cdot 10^{107}:\\ \;\;\;\;\left(-\frac{b}{2 \cdot a}\right) - \frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \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 -9.332433396832084322962138528577137922234 \cdot 10^{-58}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r3262620 = b;
        double r3262621 = -r3262620;
        double r3262622 = r3262620 * r3262620;
        double r3262623 = 4.0;
        double r3262624 = a;
        double r3262625 = c;
        double r3262626 = r3262624 * r3262625;
        double r3262627 = r3262623 * r3262626;
        double r3262628 = r3262622 - r3262627;
        double r3262629 = sqrt(r3262628);
        double r3262630 = r3262621 - r3262629;
        double r3262631 = 2.0;
        double r3262632 = r3262631 * r3262624;
        double r3262633 = r3262630 / r3262632;
        return r3262633;
}

double f(double a, double b, double c) {
        double r3262634 = b;
        double r3262635 = -9.332433396832084e-58;
        bool r3262636 = r3262634 <= r3262635;
        double r3262637 = -1.0;
        double r3262638 = c;
        double r3262639 = r3262638 / r3262634;
        double r3262640 = r3262637 * r3262639;
        double r3262641 = 3.038903409991338e+107;
        bool r3262642 = r3262634 <= r3262641;
        double r3262643 = 2.0;
        double r3262644 = a;
        double r3262645 = r3262643 * r3262644;
        double r3262646 = r3262634 / r3262645;
        double r3262647 = -r3262646;
        double r3262648 = r3262634 * r3262634;
        double r3262649 = 4.0;
        double r3262650 = r3262644 * r3262638;
        double r3262651 = r3262649 * r3262650;
        double r3262652 = r3262648 - r3262651;
        double r3262653 = sqrt(r3262652);
        double r3262654 = r3262653 / r3262645;
        double r3262655 = r3262647 - r3262654;
        double r3262656 = r3262634 / r3262644;
        double r3262657 = r3262639 - r3262656;
        double r3262658 = 1.0;
        double r3262659 = r3262657 * r3262658;
        double r3262660 = r3262642 ? r3262655 : r3262659;
        double r3262661 = r3262636 ? r3262640 : r3262660;
        return r3262661;
}

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.1
Target21.4
Herbie10.5
\[\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.332433396832084e-58

    1. Initial program 53.5

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

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

    if -9.332433396832084e-58 < b < 3.038903409991338e+107

    1. Initial program 14.1

      \[\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-sub14.1

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

    if 3.038903409991338e+107 < b

    1. Initial program 49.2

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

      \[\leadsto \color{blue}{1 \cdot \frac{c}{b} - 1 \cdot \frac{b}{a}}\]
    3. Simplified3.5

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

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

Reproduce

herbie shell --seed 2019171 +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)))