\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 -5.089942740476039 \cdot 10^{+37}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 1.1606217053284985 \cdot 10^{-301}:\\
\;\;\;\;\frac{\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4} - b}{a \cdot 2}\\
\mathbf{elif}\;b \le 1.9653089193303188 \cdot 10^{+135}:\\
\;\;\;\;\frac{c \cdot -2}{\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4} + b}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r15646448 = b;
double r15646449 = -r15646448;
double r15646450 = r15646448 * r15646448;
double r15646451 = 4.0;
double r15646452 = a;
double r15646453 = r15646451 * r15646452;
double r15646454 = c;
double r15646455 = r15646453 * r15646454;
double r15646456 = r15646450 - r15646455;
double r15646457 = sqrt(r15646456);
double r15646458 = r15646449 + r15646457;
double r15646459 = 2.0;
double r15646460 = r15646459 * r15646452;
double r15646461 = r15646458 / r15646460;
return r15646461;
}
double f(double a, double b, double c) {
double r15646462 = b;
double r15646463 = -5.089942740476039e+37;
bool r15646464 = r15646462 <= r15646463;
double r15646465 = c;
double r15646466 = r15646465 / r15646462;
double r15646467 = a;
double r15646468 = r15646462 / r15646467;
double r15646469 = r15646466 - r15646468;
double r15646470 = 1.1606217053284985e-301;
bool r15646471 = r15646462 <= r15646470;
double r15646472 = r15646462 * r15646462;
double r15646473 = r15646465 * r15646467;
double r15646474 = 4.0;
double r15646475 = r15646473 * r15646474;
double r15646476 = r15646472 - r15646475;
double r15646477 = sqrt(r15646476);
double r15646478 = r15646477 - r15646462;
double r15646479 = 2.0;
double r15646480 = r15646467 * r15646479;
double r15646481 = r15646478 / r15646480;
double r15646482 = 1.9653089193303188e+135;
bool r15646483 = r15646462 <= r15646482;
double r15646484 = -2.0;
double r15646485 = r15646465 * r15646484;
double r15646486 = r15646477 + r15646462;
double r15646487 = r15646485 / r15646486;
double r15646488 = -r15646466;
double r15646489 = r15646483 ? r15646487 : r15646488;
double r15646490 = r15646471 ? r15646481 : r15646489;
double r15646491 = r15646464 ? r15646469 : r15646490;
return r15646491;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.0 |
|---|---|
| Target | 20.7 |
| Herbie | 7.1 |
if b < -5.089942740476039e+37Initial program 34.9
Simplified34.9
rmApplied div-inv35.0
Taylor expanded around -inf 6.3
if -5.089942740476039e+37 < b < 1.1606217053284985e-301Initial program 10.3
Simplified10.3
rmApplied div-inv10.4
rmApplied un-div-inv10.3
if 1.1606217053284985e-301 < b < 1.9653089193303188e+135Initial program 34.6
Simplified34.6
rmApplied div-inv34.6
rmApplied flip--34.7
Applied associate-*l/34.7
Simplified14.7
Taylor expanded around 0 8.3
if 1.9653089193303188e+135 < b Initial program 61.2
Simplified61.2
Taylor expanded around inf 2.1
Simplified2.1
Final simplification7.1
herbie shell --seed 2019121
(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)))