\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\end{array}\begin{array}{l}
\mathbf{if}\;b \le -2.900769547116861223219498082835437225018 \cdot 10^{46}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{c \cdot 2}{\mathsf{fma}\left(-2, b, \frac{a}{b} \cdot \left(c \cdot 2\right)\right)}\\
\end{array}\\
\mathbf{elif}\;b \le 0.173897874048477174557802982235443778336:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{c \cdot 2}{\left(-b\right) + \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{\mathsf{fma}\left(2, \frac{a \cdot c}{b}, b \cdot -2\right)}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{c \cdot 2}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} + \left(-b\right)}\\
\end{array}double f(double a, double b, double c) {
double r1176406 = b;
double r1176407 = 0.0;
bool r1176408 = r1176406 >= r1176407;
double r1176409 = -r1176406;
double r1176410 = r1176406 * r1176406;
double r1176411 = 4.0;
double r1176412 = a;
double r1176413 = r1176411 * r1176412;
double r1176414 = c;
double r1176415 = r1176413 * r1176414;
double r1176416 = r1176410 - r1176415;
double r1176417 = sqrt(r1176416);
double r1176418 = r1176409 - r1176417;
double r1176419 = 2.0;
double r1176420 = r1176419 * r1176412;
double r1176421 = r1176418 / r1176420;
double r1176422 = r1176419 * r1176414;
double r1176423 = r1176409 + r1176417;
double r1176424 = r1176422 / r1176423;
double r1176425 = r1176408 ? r1176421 : r1176424;
return r1176425;
}
double f(double a, double b, double c) {
double r1176426 = b;
double r1176427 = -2.900769547116861e+46;
bool r1176428 = r1176426 <= r1176427;
double r1176429 = 0.0;
bool r1176430 = r1176426 >= r1176429;
double r1176431 = -r1176426;
double r1176432 = r1176426 * r1176426;
double r1176433 = 4.0;
double r1176434 = a;
double r1176435 = r1176433 * r1176434;
double r1176436 = c;
double r1176437 = r1176435 * r1176436;
double r1176438 = r1176432 - r1176437;
double r1176439 = sqrt(r1176438);
double r1176440 = r1176431 - r1176439;
double r1176441 = 2.0;
double r1176442 = r1176441 * r1176434;
double r1176443 = r1176440 / r1176442;
double r1176444 = r1176436 * r1176441;
double r1176445 = -2.0;
double r1176446 = r1176434 / r1176426;
double r1176447 = r1176446 * r1176444;
double r1176448 = fma(r1176445, r1176426, r1176447);
double r1176449 = r1176444 / r1176448;
double r1176450 = r1176430 ? r1176443 : r1176449;
double r1176451 = 0.17389787404847717;
bool r1176452 = r1176426 <= r1176451;
double r1176453 = sqrt(r1176439);
double r1176454 = r1176453 * r1176453;
double r1176455 = r1176431 + r1176454;
double r1176456 = r1176444 / r1176455;
double r1176457 = r1176430 ? r1176443 : r1176456;
double r1176458 = r1176434 * r1176436;
double r1176459 = r1176458 / r1176426;
double r1176460 = r1176426 * r1176445;
double r1176461 = fma(r1176441, r1176459, r1176460);
double r1176462 = r1176461 / r1176442;
double r1176463 = r1176439 + r1176431;
double r1176464 = r1176444 / r1176463;
double r1176465 = r1176430 ? r1176462 : r1176464;
double r1176466 = r1176452 ? r1176457 : r1176465;
double r1176467 = r1176428 ? r1176450 : r1176466;
return r1176467;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -2.900769547116861e+46Initial program 25.6
rmApplied add-sqr-sqrt25.6
Applied sqrt-prod25.7
Taylor expanded around -inf 6.9
Simplified3.6
if -2.900769547116861e+46 < b < 0.17389787404847717Initial program 10.2
rmApplied add-sqr-sqrt10.2
Applied sqrt-prod10.3
if 0.17389787404847717 < b Initial program 31.2
Taylor expanded around inf 11.5
Simplified11.5
Final simplification8.6
herbie shell --seed 2019168 +o rules:numerics
(FPCore (a b c)
:name "jeff quadratic root 1"
(if (>= b 0.0) (/ (- (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))) (* 2.0 a)) (/ (* 2.0 c) (+ (- b) (sqrt (- (* b b) (* (* 4.0 a) c)))))))