\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 -5.042692342260054836767142644856875306471 \cdot 10^{58}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{2 \cdot \frac{a \cdot c}{b} - 2 \cdot b}\\
\end{array}\\
\mathbf{elif}\;b \le 87537227540251800037021545535125898395650:\\
\;\;\;\;\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}:\\
\;\;\;\;c \cdot \frac{2}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt[3]{\frac{2 \cdot c}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}} \cdot \sqrt[3]{\frac{2 \cdot c}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\right) \cdot \sqrt[3]{\frac{2 \cdot c}{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\
\end{array}double f(double a, double b, double c) {
double r35440 = b;
double r35441 = 0.0;
bool r35442 = r35440 >= r35441;
double r35443 = -r35440;
double r35444 = r35440 * r35440;
double r35445 = 4.0;
double r35446 = a;
double r35447 = r35445 * r35446;
double r35448 = c;
double r35449 = r35447 * r35448;
double r35450 = r35444 - r35449;
double r35451 = sqrt(r35450);
double r35452 = r35443 - r35451;
double r35453 = 2.0;
double r35454 = r35453 * r35446;
double r35455 = r35452 / r35454;
double r35456 = r35453 * r35448;
double r35457 = r35443 + r35451;
double r35458 = r35456 / r35457;
double r35459 = r35442 ? r35455 : r35458;
return r35459;
}
double f(double a, double b, double c) {
double r35460 = b;
double r35461 = -5.042692342260055e+58;
bool r35462 = r35460 <= r35461;
double r35463 = 0.0;
bool r35464 = r35460 >= r35463;
double r35465 = 1.0;
double r35466 = c;
double r35467 = r35466 / r35460;
double r35468 = a;
double r35469 = r35460 / r35468;
double r35470 = r35467 - r35469;
double r35471 = r35465 * r35470;
double r35472 = 2.0;
double r35473 = r35472 * r35466;
double r35474 = r35468 * r35466;
double r35475 = r35474 / r35460;
double r35476 = r35472 * r35475;
double r35477 = 2.0;
double r35478 = r35477 * r35460;
double r35479 = r35476 - r35478;
double r35480 = r35473 / r35479;
double r35481 = r35464 ? r35471 : r35480;
double r35482 = 8.75372275402518e+40;
bool r35483 = r35460 <= r35482;
double r35484 = -r35460;
double r35485 = r35460 * r35460;
double r35486 = 4.0;
double r35487 = r35486 * r35468;
double r35488 = r35487 * r35466;
double r35489 = r35485 - r35488;
double r35490 = sqrt(r35489);
double r35491 = r35484 - r35490;
double r35492 = r35472 * r35468;
double r35493 = r35491 / r35492;
double r35494 = r35490 - r35460;
double r35495 = r35472 / r35494;
double r35496 = r35466 * r35495;
double r35497 = r35464 ? r35493 : r35496;
double r35498 = r35484 + r35490;
double r35499 = r35473 / r35498;
double r35500 = cbrt(r35499);
double r35501 = r35500 * r35500;
double r35502 = r35501 * r35500;
double r35503 = r35464 ? r35471 : r35502;
double r35504 = r35483 ? r35497 : r35503;
double r35505 = r35462 ? r35481 : r35504;
return r35505;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -5.042692342260055e+58Initial program 26.8
Taylor expanded around inf 26.8
Taylor expanded around 0 26.8
Simplified26.8
Taylor expanded around -inf 7.4
if -5.042692342260055e+58 < b < 8.75372275402518e+40Initial program 9.9
Simplified10.0
if 8.75372275402518e+40 < b Initial program 36.5
Taylor expanded around inf 11.0
Taylor expanded around 0 6.2
Simplified6.2
rmApplied add-cube-cbrt6.2
Final simplification8.5
herbie shell --seed 2019323 +o rules:numerics
(FPCore (a b c)
:name "jeff quadratic root 1"
:precision binary64
(if (>= b 0.0) (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ (* 2 c) (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))))))