Average Error: 34.4 → 10.2
Time: 9.4s
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 r106963 = b;
        double r106964 = -r106963;
        double r106965 = r106963 * r106963;
        double r106966 = 4.0;
        double r106967 = a;
        double r106968 = c;
        double r106969 = r106967 * r106968;
        double r106970 = r106966 * r106969;
        double r106971 = r106965 - r106970;
        double r106972 = sqrt(r106971);
        double r106973 = r106964 - r106972;
        double r106974 = 2.0;
        double r106975 = r106974 * r106967;
        double r106976 = r106973 / r106975;
        return r106976;
}

double f(double a, double b, double c) {
        double r106977 = b;
        double r106978 = -9.665680960493338e-39;
        bool r106979 = r106977 <= r106978;
        double r106980 = -1.0;
        double r106981 = c;
        double r106982 = r106981 / r106977;
        double r106983 = r106980 * r106982;
        double r106984 = 1.964008874546701e+84;
        bool r106985 = r106977 <= r106984;
        double r106986 = -r106977;
        double r106987 = r106977 * r106977;
        double r106988 = 4.0;
        double r106989 = a;
        double r106990 = r106989 * r106981;
        double r106991 = r106988 * r106990;
        double r106992 = r106987 - r106991;
        double r106993 = sqrt(r106992);
        double r106994 = r106986 - r106993;
        double r106995 = 2.0;
        double r106996 = r106995 * r106989;
        double r106997 = r106994 / r106996;
        double r106998 = r106977 / r106989;
        double r106999 = r106980 * r106998;
        double r107000 = r106985 ? r106997 : r106999;
        double r107001 = r106979 ? r106983 : r107000;
        return r107001;
}

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 "The quadratic formula (r2)"
  :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)))