Average Error: 33.7 → 10.2
Time: 20.1s
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 -5.3248915655872564 \cdot 10^{+79}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le 4.2796532586596585 \cdot 10^{-91}:\\ \;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - c \cdot \left(4 \cdot a\right)}\right) \cdot \frac{\frac{1}{2}}{a}\\ \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 -5.3248915655872564 \cdot 10^{+79}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r3545053 = b;
        double r3545054 = -r3545053;
        double r3545055 = r3545053 * r3545053;
        double r3545056 = 4.0;
        double r3545057 = a;
        double r3545058 = r3545056 * r3545057;
        double r3545059 = c;
        double r3545060 = r3545058 * r3545059;
        double r3545061 = r3545055 - r3545060;
        double r3545062 = sqrt(r3545061);
        double r3545063 = r3545054 + r3545062;
        double r3545064 = 2.0;
        double r3545065 = r3545064 * r3545057;
        double r3545066 = r3545063 / r3545065;
        return r3545066;
}

double f(double a, double b, double c) {
        double r3545067 = b;
        double r3545068 = -5.3248915655872564e+79;
        bool r3545069 = r3545067 <= r3545068;
        double r3545070 = c;
        double r3545071 = r3545070 / r3545067;
        double r3545072 = a;
        double r3545073 = r3545067 / r3545072;
        double r3545074 = r3545071 - r3545073;
        double r3545075 = 4.2796532586596585e-91;
        bool r3545076 = r3545067 <= r3545075;
        double r3545077 = -r3545067;
        double r3545078 = r3545067 * r3545067;
        double r3545079 = 4.0;
        double r3545080 = r3545079 * r3545072;
        double r3545081 = r3545070 * r3545080;
        double r3545082 = r3545078 - r3545081;
        double r3545083 = sqrt(r3545082);
        double r3545084 = r3545077 + r3545083;
        double r3545085 = 0.5;
        double r3545086 = r3545085 / r3545072;
        double r3545087 = r3545084 * r3545086;
        double r3545088 = -r3545071;
        double r3545089 = r3545076 ? r3545087 : r3545088;
        double r3545090 = r3545069 ? r3545074 : r3545089;
        return r3545090;
}

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.7
Target20.5
Herbie10.2
\[\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 3 regimes
  2. if b < -5.3248915655872564e+79

    1. Initial program 41.1

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

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

      \[\leadsto \left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \color{blue}{\frac{\frac{1}{2}}{a}}\]
    5. Taylor expanded around -inf 4.6

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

    if -5.3248915655872564e+79 < b < 4.2796532586596585e-91

    1. Initial program 13.0

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

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

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

    if 4.2796532586596585e-91 < b

    1. Initial program 52.0

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

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

      \[\leadsto \left(\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \color{blue}{\frac{\frac{1}{2}}{a}}\]
    5. Taylor expanded around inf 9.6

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

      \[\leadsto \color{blue}{\frac{-c}{b}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification10.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -5.3248915655872564 \cdot 10^{+79}:\\ \;\;\;\;\frac{c}{b} - \frac{b}{a}\\ \mathbf{elif}\;b \le 4.2796532586596585 \cdot 10^{-91}:\\ \;\;\;\;\left(\left(-b\right) + \sqrt{b \cdot b - c \cdot \left(4 \cdot a\right)}\right) \cdot \frac{\frac{1}{2}}{a}\\ \mathbf{else}:\\ \;\;\;\;-\frac{c}{b}\\ \end{array}\]

Reproduce

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