Average Error: 34.4 → 10.3
Time: 5.5s
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 -5.4278904486834676 \cdot 10^{-42}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 2.8046284917653458 \cdot 10^{91}:\\ \;\;\;\;\frac{1}{\frac{2 \cdot a}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\ \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 -5.4278904486834676 \cdot 10^{-42}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r89347 = b;
        double r89348 = -r89347;
        double r89349 = r89347 * r89347;
        double r89350 = 4.0;
        double r89351 = a;
        double r89352 = c;
        double r89353 = r89351 * r89352;
        double r89354 = r89350 * r89353;
        double r89355 = r89349 - r89354;
        double r89356 = sqrt(r89355);
        double r89357 = r89348 - r89356;
        double r89358 = 2.0;
        double r89359 = r89358 * r89351;
        double r89360 = r89357 / r89359;
        return r89360;
}

double f(double a, double b, double c) {
        double r89361 = b;
        double r89362 = -5.4278904486834676e-42;
        bool r89363 = r89361 <= r89362;
        double r89364 = -1.0;
        double r89365 = c;
        double r89366 = r89365 / r89361;
        double r89367 = r89364 * r89366;
        double r89368 = 2.8046284917653458e+91;
        bool r89369 = r89361 <= r89368;
        double r89370 = 1.0;
        double r89371 = 2.0;
        double r89372 = a;
        double r89373 = r89371 * r89372;
        double r89374 = -r89361;
        double r89375 = r89361 * r89361;
        double r89376 = 4.0;
        double r89377 = r89372 * r89365;
        double r89378 = r89376 * r89377;
        double r89379 = r89375 - r89378;
        double r89380 = sqrt(r89379);
        double r89381 = r89374 - r89380;
        double r89382 = r89373 / r89381;
        double r89383 = r89370 / r89382;
        double r89384 = 1.0;
        double r89385 = r89361 / r89372;
        double r89386 = r89366 - r89385;
        double r89387 = r89384 * r89386;
        double r89388 = r89369 ? r89383 : r89387;
        double r89389 = r89363 ? r89367 : r89388;
        return r89389;
}

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
Target20.8
Herbie10.3
\[\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 < -5.4278904486834676e-42

    1. Initial program 54.7

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

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

    if -5.4278904486834676e-42 < b < 2.8046284917653458e+91

    1. Initial program 14.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 clear-num14.8

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

    if 2.8046284917653458e+91 < b

    1. Initial program 45.4

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

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

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

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

Reproduce

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