\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -2.9862044966069494 \cdot 10^{+41}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 1.990519652731023 \cdot 10^{-106}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{\left(c \cdot a\right) \cdot -4 + b \cdot b}}{a \cdot 2}\\
\mathbf{elif}\;b \le 1.0350377446088803 \cdot 10^{-69}:\\
\;\;\;\;-\frac{c}{b}\\
\mathbf{elif}\;b \le 3.325219738594455 \cdot 10^{-21}:\\
\;\;\;\;\frac{\frac{b \cdot b - \left(\left(c \cdot a\right) \cdot -4 + b \cdot b\right)}{\left(-b\right) - \sqrt{\left(c \cdot a\right) \cdot -4 + b \cdot b}}}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r5413517 = b;
double r5413518 = -r5413517;
double r5413519 = r5413517 * r5413517;
double r5413520 = 4.0;
double r5413521 = a;
double r5413522 = r5413520 * r5413521;
double r5413523 = c;
double r5413524 = r5413522 * r5413523;
double r5413525 = r5413519 - r5413524;
double r5413526 = sqrt(r5413525);
double r5413527 = r5413518 + r5413526;
double r5413528 = 2.0;
double r5413529 = r5413528 * r5413521;
double r5413530 = r5413527 / r5413529;
return r5413530;
}
double f(double a, double b, double c) {
double r5413531 = b;
double r5413532 = -2.9862044966069494e+41;
bool r5413533 = r5413531 <= r5413532;
double r5413534 = c;
double r5413535 = r5413534 / r5413531;
double r5413536 = a;
double r5413537 = r5413531 / r5413536;
double r5413538 = r5413535 - r5413537;
double r5413539 = 1.990519652731023e-106;
bool r5413540 = r5413531 <= r5413539;
double r5413541 = -r5413531;
double r5413542 = r5413534 * r5413536;
double r5413543 = -4.0;
double r5413544 = r5413542 * r5413543;
double r5413545 = r5413531 * r5413531;
double r5413546 = r5413544 + r5413545;
double r5413547 = sqrt(r5413546);
double r5413548 = r5413541 + r5413547;
double r5413549 = 2.0;
double r5413550 = r5413536 * r5413549;
double r5413551 = r5413548 / r5413550;
double r5413552 = 1.0350377446088803e-69;
bool r5413553 = r5413531 <= r5413552;
double r5413554 = -r5413535;
double r5413555 = 3.325219738594455e-21;
bool r5413556 = r5413531 <= r5413555;
double r5413557 = r5413545 - r5413546;
double r5413558 = r5413541 - r5413547;
double r5413559 = r5413557 / r5413558;
double r5413560 = r5413559 / r5413550;
double r5413561 = r5413556 ? r5413560 : r5413554;
double r5413562 = r5413553 ? r5413554 : r5413561;
double r5413563 = r5413540 ? r5413551 : r5413562;
double r5413564 = r5413533 ? r5413538 : r5413563;
return r5413564;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 33.0 |
|---|---|
| Target | 20.1 |
| Herbie | 10.8 |
if b < -2.9862044966069494e+41Initial program 34.1
Taylor expanded around -inf 6.3
if -2.9862044966069494e+41 < b < 1.990519652731023e-106Initial program 12.8
Taylor expanded around 0 12.8
Simplified12.8
if 1.990519652731023e-106 < b < 1.0350377446088803e-69 or 3.325219738594455e-21 < b Initial program 53.1
Taylor expanded around inf 8.7
Simplified8.7
if 1.0350377446088803e-69 < b < 3.325219738594455e-21Initial program 35.7
Taylor expanded around 0 35.5
Simplified35.5
rmApplied flip-+35.6
Simplified35.6
Simplified35.6
Final simplification10.8
herbie shell --seed 2019164
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))