Average Error: 33.9 → 9.7
Time: 15.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 -2.968339104808995575492318760699662265421 \cdot 10^{-12}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le -4.111806971508121285438180273428571147006 \cdot 10^{-72}:\\ \;\;\;\;\frac{\frac{\left({b}^{2} - {b}^{2}\right) + 4 \cdot \left(a \cdot c\right)}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}{2 \cdot a}\\ \mathbf{elif}\;b \le -2.830344977336381507706273409215818882174 \cdot 10^{-99}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 1.207713874276650441727053820537472427931 \cdot 10^{93}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\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 -2.968339104808995575492318760699662265421 \cdot 10^{-12}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

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

\mathbf{elif}\;b \le -2.830344977336381507706273409215818882174 \cdot 10^{-99}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\

\mathbf{elif}\;b \le 1.207713874276650441727053820537472427931 \cdot 10^{93}:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\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 r93392 = b;
        double r93393 = -r93392;
        double r93394 = r93392 * r93392;
        double r93395 = 4.0;
        double r93396 = a;
        double r93397 = c;
        double r93398 = r93396 * r93397;
        double r93399 = r93395 * r93398;
        double r93400 = r93394 - r93399;
        double r93401 = sqrt(r93400);
        double r93402 = r93393 - r93401;
        double r93403 = 2.0;
        double r93404 = r93403 * r93396;
        double r93405 = r93402 / r93404;
        return r93405;
}

double f(double a, double b, double c) {
        double r93406 = b;
        double r93407 = -2.9683391048089956e-12;
        bool r93408 = r93406 <= r93407;
        double r93409 = -1.0;
        double r93410 = c;
        double r93411 = r93410 / r93406;
        double r93412 = r93409 * r93411;
        double r93413 = -4.1118069715081213e-72;
        bool r93414 = r93406 <= r93413;
        double r93415 = 2.0;
        double r93416 = pow(r93406, r93415);
        double r93417 = r93416 - r93416;
        double r93418 = 4.0;
        double r93419 = a;
        double r93420 = r93419 * r93410;
        double r93421 = r93418 * r93420;
        double r93422 = r93417 + r93421;
        double r93423 = r93406 * r93406;
        double r93424 = r93423 - r93421;
        double r93425 = sqrt(r93424);
        double r93426 = r93425 - r93406;
        double r93427 = r93422 / r93426;
        double r93428 = 2.0;
        double r93429 = r93428 * r93419;
        double r93430 = r93427 / r93429;
        double r93431 = -2.8303449773363815e-99;
        bool r93432 = r93406 <= r93431;
        double r93433 = 1.2077138742766504e+93;
        bool r93434 = r93406 <= r93433;
        double r93435 = -r93406;
        double r93436 = r93435 - r93425;
        double r93437 = r93436 / r93429;
        double r93438 = 1.0;
        double r93439 = r93406 / r93419;
        double r93440 = r93411 - r93439;
        double r93441 = r93438 * r93440;
        double r93442 = r93434 ? r93437 : r93441;
        double r93443 = r93432 ? r93412 : r93442;
        double r93444 = r93414 ? r93430 : r93443;
        double r93445 = r93408 ? r93412 : r93444;
        return r93445;
}

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.9
Target21.0
Herbie9.7
\[\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 4 regimes
  2. if b < -2.9683391048089956e-12 or -4.1118069715081213e-72 < b < -2.8303449773363815e-99

    1. Initial program 54.3

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

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

    if -2.9683391048089956e-12 < b < -4.1118069715081213e-72

    1. Initial program 38.2

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

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

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

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

    if -2.8303449773363815e-99 < b < 1.2077138742766504e+93

    1. Initial program 12.6

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

    if 1.2077138742766504e+93 < b

    1. Initial program 43.8

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

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -2.968339104808995575492318760699662265421 \cdot 10^{-12}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le -4.111806971508121285438180273428571147006 \cdot 10^{-72}:\\ \;\;\;\;\frac{\frac{\left({b}^{2} - {b}^{2}\right) + 4 \cdot \left(a \cdot c\right)}{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)} - b}}{2 \cdot a}\\ \mathbf{elif}\;b \le -2.830344977336381507706273409215818882174 \cdot 10^{-99}:\\ \;\;\;\;-1 \cdot \frac{c}{b}\\ \mathbf{elif}\;b \le 1.207713874276650441727053820537472427931 \cdot 10^{93}:\\ \;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019294 
(FPCore (a b c)
  :name "quadm (p42, negative)"
  :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)))