\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 -3.336444958885988609650625284454613720554 \cdot 10^{152}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 2.866557489300444694985602640640979475553 \cdot 10^{-301}:\\
\;\;\;\;\frac{c \cdot 2}{\left(-b\right) + \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}\\
\mathbf{elif}\;b \le 2.360908374051695590422690701366520544893 \cdot 10^{86}:\\
\;\;\;\;\left(\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}\right) \cdot \frac{1}{a \cdot 2}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r5189461 = b;
double r5189462 = -r5189461;
double r5189463 = r5189461 * r5189461;
double r5189464 = 4.0;
double r5189465 = a;
double r5189466 = c;
double r5189467 = r5189465 * r5189466;
double r5189468 = r5189464 * r5189467;
double r5189469 = r5189463 - r5189468;
double r5189470 = sqrt(r5189469);
double r5189471 = r5189462 - r5189470;
double r5189472 = 2.0;
double r5189473 = r5189472 * r5189465;
double r5189474 = r5189471 / r5189473;
return r5189474;
}
double f(double a, double b, double c) {
double r5189475 = b;
double r5189476 = -3.3364449588859886e+152;
bool r5189477 = r5189475 <= r5189476;
double r5189478 = -1.0;
double r5189479 = c;
double r5189480 = r5189479 / r5189475;
double r5189481 = r5189478 * r5189480;
double r5189482 = 2.8665574893004447e-301;
bool r5189483 = r5189475 <= r5189482;
double r5189484 = 2.0;
double r5189485 = r5189479 * r5189484;
double r5189486 = -r5189475;
double r5189487 = r5189475 * r5189475;
double r5189488 = 4.0;
double r5189489 = a;
double r5189490 = r5189489 * r5189479;
double r5189491 = r5189488 * r5189490;
double r5189492 = r5189487 - r5189491;
double r5189493 = sqrt(r5189492);
double r5189494 = r5189486 + r5189493;
double r5189495 = r5189485 / r5189494;
double r5189496 = 2.3609083740516956e+86;
bool r5189497 = r5189475 <= r5189496;
double r5189498 = r5189486 - r5189493;
double r5189499 = 1.0;
double r5189500 = r5189489 * r5189484;
double r5189501 = r5189499 / r5189500;
double r5189502 = r5189498 * r5189501;
double r5189503 = 1.0;
double r5189504 = r5189475 / r5189489;
double r5189505 = r5189480 - r5189504;
double r5189506 = r5189503 * r5189505;
double r5189507 = r5189497 ? r5189502 : r5189506;
double r5189508 = r5189483 ? r5189495 : r5189507;
double r5189509 = r5189477 ? r5189481 : r5189508;
return r5189509;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.3 |
|---|---|
| Target | 21.3 |
| Herbie | 6.8 |
if b < -3.3364449588859886e+152Initial program 63.9
Taylor expanded around -inf 1.6
if -3.3364449588859886e+152 < b < 2.8665574893004447e-301Initial program 35.0
rmApplied div-inv35.0
rmApplied flip--35.0
Applied associate-*l/35.0
Simplified15.0
Taylor expanded around 0 8.9
if 2.8665574893004447e-301 < b < 2.3609083740516956e+86Initial program 9.0
rmApplied div-inv9.1
if 2.3609083740516956e+86 < b Initial program 44.1
Taylor expanded around inf 3.9
Simplified3.9
Final simplification6.8
herbie shell --seed 2019170
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))