\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.34601621878688 \cdot 10^{+118}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 1.3115303715225787 \cdot 10^{-131}:\\
\;\;\;\;\left(\sqrt{b \cdot b - \left(c \cdot a\right) \cdot 4} - b\right) \cdot \frac{1}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;-\frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r3081443 = b;
double r3081444 = -r3081443;
double r3081445 = r3081443 * r3081443;
double r3081446 = 4.0;
double r3081447 = a;
double r3081448 = r3081446 * r3081447;
double r3081449 = c;
double r3081450 = r3081448 * r3081449;
double r3081451 = r3081445 - r3081450;
double r3081452 = sqrt(r3081451);
double r3081453 = r3081444 + r3081452;
double r3081454 = 2.0;
double r3081455 = r3081454 * r3081447;
double r3081456 = r3081453 / r3081455;
return r3081456;
}
double f(double a, double b, double c) {
double r3081457 = b;
double r3081458 = -2.34601621878688e+118;
bool r3081459 = r3081457 <= r3081458;
double r3081460 = c;
double r3081461 = r3081460 / r3081457;
double r3081462 = a;
double r3081463 = r3081457 / r3081462;
double r3081464 = r3081461 - r3081463;
double r3081465 = 1.3115303715225787e-131;
bool r3081466 = r3081457 <= r3081465;
double r3081467 = r3081457 * r3081457;
double r3081468 = r3081460 * r3081462;
double r3081469 = 4.0;
double r3081470 = r3081468 * r3081469;
double r3081471 = r3081467 - r3081470;
double r3081472 = sqrt(r3081471);
double r3081473 = r3081472 - r3081457;
double r3081474 = 1.0;
double r3081475 = 2.0;
double r3081476 = r3081462 * r3081475;
double r3081477 = r3081474 / r3081476;
double r3081478 = r3081473 * r3081477;
double r3081479 = -r3081461;
double r3081480 = r3081466 ? r3081478 : r3081479;
double r3081481 = r3081459 ? r3081464 : r3081480;
return r3081481;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 32.7 |
|---|---|
| Target | 20.0 |
| Herbie | 10.1 |
if b < -2.34601621878688e+118Initial program 48.8
Simplified48.8
Taylor expanded around -inf 3.1
if -2.34601621878688e+118 < b < 1.3115303715225787e-131Initial program 10.7
Simplified10.7
rmApplied div-inv10.8
if 1.3115303715225787e-131 < b Initial program 50.3
Simplified50.3
rmApplied div-inv50.4
Taylor expanded around inf 11.7
Simplified11.7
Final simplification10.1
herbie shell --seed 2019134
(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)))