Average Error: 33.6 → 10.0
Time: 22.6s
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 -3.2092322739463293 \cdot 10^{-86}:\\ \;\;\;\;-\frac{c}{b}\\ \mathbf{elif}\;b \le 2.891777552454845 \cdot 10^{+74}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4}}{a \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;\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 -3.2092322739463293 \cdot 10^{-86}:\\
\;\;\;\;-\frac{c}{b}\\

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

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

\end{array}
double f(double a, double b, double c) {
        double r3902387 = b;
        double r3902388 = -r3902387;
        double r3902389 = r3902387 * r3902387;
        double r3902390 = 4.0;
        double r3902391 = a;
        double r3902392 = c;
        double r3902393 = r3902391 * r3902392;
        double r3902394 = r3902390 * r3902393;
        double r3902395 = r3902389 - r3902394;
        double r3902396 = sqrt(r3902395);
        double r3902397 = r3902388 - r3902396;
        double r3902398 = 2.0;
        double r3902399 = r3902398 * r3902391;
        double r3902400 = r3902397 / r3902399;
        return r3902400;
}

double f(double a, double b, double c) {
        double r3902401 = b;
        double r3902402 = -3.2092322739463293e-86;
        bool r3902403 = r3902401 <= r3902402;
        double r3902404 = c;
        double r3902405 = r3902404 / r3902401;
        double r3902406 = -r3902405;
        double r3902407 = 2.891777552454845e+74;
        bool r3902408 = r3902401 <= r3902407;
        double r3902409 = -r3902401;
        double r3902410 = r3902401 * r3902401;
        double r3902411 = a;
        double r3902412 = r3902404 * r3902411;
        double r3902413 = 4.0;
        double r3902414 = r3902412 * r3902413;
        double r3902415 = r3902410 - r3902414;
        double r3902416 = sqrt(r3902415);
        double r3902417 = r3902409 - r3902416;
        double r3902418 = 2.0;
        double r3902419 = r3902411 * r3902418;
        double r3902420 = r3902417 / r3902419;
        double r3902421 = r3902409 / r3902411;
        double r3902422 = r3902408 ? r3902420 : r3902421;
        double r3902423 = r3902403 ? r3902406 : r3902422;
        return r3902423;
}

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.6
Target20.7
Herbie10.0
\[\begin{array}{l} \mathbf{if}\;b \lt 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 < -3.2092322739463293e-86

    1. Initial program 52.3

      \[\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-inv52.3

      \[\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. Simplified52.3

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

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

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

    if -3.2092322739463293e-86 < b < 2.891777552454845e+74

    1. Initial program 13.1

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

    if 2.891777552454845e+74 < b

    1. Initial program 38.9

      \[\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-num39.0

      \[\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.4

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -3.2092322739463293 \cdot 10^{-86}:\\ \;\;\;\;-\frac{c}{b}\\ \mathbf{elif}\;b \le 2.891777552454845 \cdot 10^{+74}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4}}{a \cdot 2}\\ \mathbf{else}:\\ \;\;\;\;\frac{-b}{a}\\ \end{array}\]

Reproduce

herbie shell --seed 2019130 
(FPCore (a b c)
  :name "The quadratic formula (r2)"

  :herbie-target
  (if (< b 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)))