\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 -1.270528699455007486596308100489334356636 \cdot 10^{152}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\
\mathbf{elif}\;b \le 2.1777947371956334507732300386925067972 \cdot 10^{-143}:\\
\;\;\;\;\frac{\sqrt{b \cdot b - \left(c \cdot 4\right) \cdot a} - b}{a \cdot 2}\\
\mathbf{elif}\;b \le 123203260287366115360768:\\
\;\;\;\;\frac{\frac{\left(b \cdot b - b \cdot b\right) + c \cdot \left(a \cdot 4\right)}{\left(-b\right) - \sqrt{b \cdot b - c \cdot \left(a \cdot 4\right)}}}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;\frac{c}{b} \cdot -1\\
\end{array}double f(double a, double b, double c) {
double r3650419 = b;
double r3650420 = -r3650419;
double r3650421 = r3650419 * r3650419;
double r3650422 = 4.0;
double r3650423 = a;
double r3650424 = r3650422 * r3650423;
double r3650425 = c;
double r3650426 = r3650424 * r3650425;
double r3650427 = r3650421 - r3650426;
double r3650428 = sqrt(r3650427);
double r3650429 = r3650420 + r3650428;
double r3650430 = 2.0;
double r3650431 = r3650430 * r3650423;
double r3650432 = r3650429 / r3650431;
return r3650432;
}
double f(double a, double b, double c) {
double r3650433 = b;
double r3650434 = -1.2705286994550075e+152;
bool r3650435 = r3650433 <= r3650434;
double r3650436 = c;
double r3650437 = r3650436 / r3650433;
double r3650438 = a;
double r3650439 = r3650433 / r3650438;
double r3650440 = r3650437 - r3650439;
double r3650441 = 1.0;
double r3650442 = r3650440 * r3650441;
double r3650443 = 2.1777947371956335e-143;
bool r3650444 = r3650433 <= r3650443;
double r3650445 = r3650433 * r3650433;
double r3650446 = 4.0;
double r3650447 = r3650436 * r3650446;
double r3650448 = r3650447 * r3650438;
double r3650449 = r3650445 - r3650448;
double r3650450 = sqrt(r3650449);
double r3650451 = r3650450 - r3650433;
double r3650452 = 2.0;
double r3650453 = r3650438 * r3650452;
double r3650454 = r3650451 / r3650453;
double r3650455 = 1.2320326028736612e+23;
bool r3650456 = r3650433 <= r3650455;
double r3650457 = r3650445 - r3650445;
double r3650458 = r3650438 * r3650446;
double r3650459 = r3650436 * r3650458;
double r3650460 = r3650457 + r3650459;
double r3650461 = -r3650433;
double r3650462 = r3650445 - r3650459;
double r3650463 = sqrt(r3650462);
double r3650464 = r3650461 - r3650463;
double r3650465 = r3650460 / r3650464;
double r3650466 = r3650465 / r3650453;
double r3650467 = -1.0;
double r3650468 = r3650437 * r3650467;
double r3650469 = r3650456 ? r3650466 : r3650468;
double r3650470 = r3650444 ? r3650454 : r3650469;
double r3650471 = r3650435 ? r3650442 : r3650470;
return r3650471;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.7 |
|---|---|
| Target | 21.1 |
| Herbie | 8.5 |
if b < -1.2705286994550075e+152Initial program 62.9
Taylor expanded around -inf 1.7
Simplified1.7
if -1.2705286994550075e+152 < b < 2.1777947371956335e-143Initial program 10.4
rmApplied div-inv10.5
rmApplied associate-*r/10.4
Simplified10.4
if 2.1777947371956335e-143 < b < 1.2320326028736612e+23Initial program 36.9
rmApplied flip-+37.0
Simplified18.3
if 1.2320326028736612e+23 < b Initial program 56.3
Taylor expanded around inf 4.4
Final simplification8.5
herbie shell --seed 2019168 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)))