Average Error: 34.4 → 10.4
Time: 5.9s
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.1515494582665793 \cdot 10^{-119}:\\ \;\;\;\;1 \cdot \left(-1 \cdot \frac{c}{b}\right)\\ \mathbf{elif}\;b \le 4.2504918589151378 \cdot 10^{117}:\\ \;\;\;\;1 \cdot \frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(a \cdot c\right)\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \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.1515494582665793 \cdot 10^{-119}:\\
\;\;\;\;1 \cdot \left(-1 \cdot \frac{c}{b}\right)\\

\mathbf{elif}\;b \le 4.2504918589151378 \cdot 10^{117}:\\
\;\;\;\;1 \cdot \frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(a \cdot c\right)\right)}}{2 \cdot a}\\

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

\end{array}
double f(double a, double b, double c) {
        double r86382 = b;
        double r86383 = -r86382;
        double r86384 = r86382 * r86382;
        double r86385 = 4.0;
        double r86386 = a;
        double r86387 = c;
        double r86388 = r86386 * r86387;
        double r86389 = r86385 * r86388;
        double r86390 = r86384 - r86389;
        double r86391 = sqrt(r86390);
        double r86392 = r86383 - r86391;
        double r86393 = 2.0;
        double r86394 = r86393 * r86386;
        double r86395 = r86392 / r86394;
        return r86395;
}

double f(double a, double b, double c) {
        double r86396 = b;
        double r86397 = -4.1515494582665793e-119;
        bool r86398 = r86396 <= r86397;
        double r86399 = 1.0;
        double r86400 = -1.0;
        double r86401 = c;
        double r86402 = r86401 / r86396;
        double r86403 = r86400 * r86402;
        double r86404 = r86399 * r86403;
        double r86405 = 4.250491858915138e+117;
        bool r86406 = r86396 <= r86405;
        double r86407 = -r86396;
        double r86408 = 4.0;
        double r86409 = a;
        double r86410 = r86409 * r86401;
        double r86411 = r86408 * r86410;
        double r86412 = -r86411;
        double r86413 = fma(r86396, r86396, r86412);
        double r86414 = sqrt(r86413);
        double r86415 = r86407 - r86414;
        double r86416 = 2.0;
        double r86417 = r86416 * r86409;
        double r86418 = r86415 / r86417;
        double r86419 = r86399 * r86418;
        double r86420 = 1.0;
        double r86421 = r86396 / r86409;
        double r86422 = r86402 - r86421;
        double r86423 = r86420 * r86422;
        double r86424 = r86406 ? r86419 : r86423;
        double r86425 = r86398 ? r86404 : r86424;
        return r86425;
}

Error

Bits error versus a

Bits error versus b

Bits error versus c

Target

Original34.4
Target21.3
Herbie10.4
\[\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.1515494582665793e-119

    1. Initial program 51.5

      \[\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-inv51.5

      \[\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}}\]
    4. Using strategy rm
    5. Applied *-un-lft-identity51.5

      \[\leadsto \color{blue}{\left(1 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)\right)} \cdot \frac{1}{2 \cdot a}\]
    6. Applied associate-*l*51.5

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

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

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

    if -4.1515494582665793e-119 < b < 4.250491858915138e+117

    1. Initial program 11.8

      \[\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-inv11.9

      \[\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}}\]
    4. Using strategy rm
    5. Applied *-un-lft-identity11.9

      \[\leadsto \color{blue}{\left(1 \cdot \left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right)\right)} \cdot \frac{1}{2 \cdot a}\]
    6. Applied associate-*l*11.9

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

      \[\leadsto 1 \cdot \color{blue}{\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}}\]
    8. Using strategy rm
    9. Applied fma-neg11.8

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

    if 4.250491858915138e+117 < b

    1. Initial program 52.2

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -4.1515494582665793 \cdot 10^{-119}:\\ \;\;\;\;1 \cdot \left(-1 \cdot \frac{c}{b}\right)\\ \mathbf{elif}\;b \le 4.2504918589151378 \cdot 10^{117}:\\ \;\;\;\;1 \cdot \frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(a \cdot c\right)\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \end{array}\]

Reproduce

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