Average Error: 34.5 → 10.6
Time: 9.3s
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 -4.78285893492843261 \cdot 10^{-126}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 3.6627135292415903 \cdot 10^{111}:\\ \;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;\frac{-2 \cdot b}{2 \cdot 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 -4.78285893492843261 \cdot 10^{-126}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r113177 = b;
        double r113178 = -r113177;
        double r113179 = r113177 * r113177;
        double r113180 = 4.0;
        double r113181 = a;
        double r113182 = c;
        double r113183 = r113181 * r113182;
        double r113184 = r113180 * r113183;
        double r113185 = r113179 - r113184;
        double r113186 = sqrt(r113185);
        double r113187 = r113178 - r113186;
        double r113188 = 2.0;
        double r113189 = r113188 * r113181;
        double r113190 = r113187 / r113189;
        return r113190;
}

double f(double a, double b, double c) {
        double r113191 = b;
        double r113192 = -4.7828589349284326e-126;
        bool r113193 = r113191 <= r113192;
        double r113194 = -1.0;
        double r113195 = c;
        double r113196 = r113195 / r113191;
        double r113197 = r113194 * r113196;
        double r113198 = 3.6627135292415903e+111;
        bool r113199 = r113191 <= r113198;
        double r113200 = -r113191;
        double r113201 = r113191 * r113191;
        double r113202 = 4.0;
        double r113203 = a;
        double r113204 = r113203 * r113195;
        double r113205 = r113202 * r113204;
        double r113206 = r113201 - r113205;
        double r113207 = sqrt(r113206);
        double r113208 = r113200 - r113207;
        double r113209 = 1.0;
        double r113210 = 2.0;
        double r113211 = r113210 * r113203;
        double r113212 = r113209 / r113211;
        double r113213 = r113208 * r113212;
        double r113214 = -2.0;
        double r113215 = r113214 * r113191;
        double r113216 = r113215 / r113211;
        double r113217 = r113199 ? r113213 : r113216;
        double r113218 = r113193 ? r113197 : r113217;
        return r113218;
}

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.5
Target20.6
Herbie10.6
\[\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 < -4.7828589349284326e-126

    1. Initial program 51.3

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

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

    if -4.7828589349284326e-126 < b < 3.6627135292415903e+111

    1. Initial program 12.0

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

      \[\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 3.6627135292415903e+111 < b

    1. Initial program 49.7

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

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

      \[\leadsto \frac{\left(-b\right) - \color{blue}{\sqrt{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}} \cdot \sqrt{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}}{2 \cdot a}\]
    5. Using strategy rm
    6. Applied flip--61.8

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

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

      \[\leadsto \frac{\frac{0 + \left(a \cdot c\right) \cdot 4}{\color{blue}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}}{2 \cdot a}\]
    9. Taylor expanded around 0 3.7

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

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

Reproduce

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