\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\end{array}\begin{array}{l}
\mathbf{if}\;b \le -5.105369019268963816293244653075052742799 \cdot 10^{141}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(2, \frac{a \cdot c}{b}, -2 \cdot b\right)}{2}}{a}\\
\end{array}\\
\mathbf{elif}\;b \le 5.139720957774800459105165687985873103887 \cdot 10^{144}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\left|\sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}\right| \cdot \sqrt{\sqrt[3]{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt[3]{\sqrt{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt{\left(\sqrt[3]{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt[3]{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}\right) \cdot \sqrt[3]{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}}} - b}{2}}{a}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\mathsf{fma}\left(2, \frac{a \cdot c}{b}, -2 \cdot b\right)}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}{2}}{a}\\
\end{array}double f(double a, double b, double c) {
double r32442 = b;
double r32443 = 0.0;
bool r32444 = r32442 >= r32443;
double r32445 = 2.0;
double r32446 = c;
double r32447 = r32445 * r32446;
double r32448 = -r32442;
double r32449 = r32442 * r32442;
double r32450 = 4.0;
double r32451 = a;
double r32452 = r32450 * r32451;
double r32453 = r32452 * r32446;
double r32454 = r32449 - r32453;
double r32455 = sqrt(r32454);
double r32456 = r32448 - r32455;
double r32457 = r32447 / r32456;
double r32458 = r32448 + r32455;
double r32459 = r32445 * r32451;
double r32460 = r32458 / r32459;
double r32461 = r32444 ? r32457 : r32460;
return r32461;
}
double f(double a, double b, double c) {
double r32462 = b;
double r32463 = -5.105369019268964e+141;
bool r32464 = r32462 <= r32463;
double r32465 = 0.0;
bool r32466 = r32462 >= r32465;
double r32467 = 2.0;
double r32468 = c;
double r32469 = r32467 * r32468;
double r32470 = -r32462;
double r32471 = r32462 * r32462;
double r32472 = 4.0;
double r32473 = a;
double r32474 = r32472 * r32473;
double r32475 = r32474 * r32468;
double r32476 = r32471 - r32475;
double r32477 = sqrt(r32476);
double r32478 = r32470 - r32477;
double r32479 = r32469 / r32478;
double r32480 = r32473 * r32468;
double r32481 = r32480 / r32462;
double r32482 = -2.0;
double r32483 = r32482 * r32462;
double r32484 = fma(r32467, r32481, r32483);
double r32485 = r32484 / r32467;
double r32486 = r32485 / r32473;
double r32487 = r32466 ? r32479 : r32486;
double r32488 = 5.1397209577748005e+144;
bool r32489 = r32462 <= r32488;
double r32490 = cbrt(r32476);
double r32491 = fabs(r32490);
double r32492 = cbrt(r32477);
double r32493 = sqrt(r32477);
double r32494 = r32492 * r32492;
double r32495 = r32494 * r32492;
double r32496 = sqrt(r32495);
double r32497 = r32493 * r32496;
double r32498 = cbrt(r32497);
double r32499 = r32492 * r32498;
double r32500 = sqrt(r32499);
double r32501 = r32491 * r32500;
double r32502 = r32501 - r32462;
double r32503 = r32502 / r32467;
double r32504 = r32503 / r32473;
double r32505 = r32466 ? r32479 : r32504;
double r32506 = r32469 / r32484;
double r32507 = r32477 - r32462;
double r32508 = r32507 / r32467;
double r32509 = r32508 / r32473;
double r32510 = r32466 ? r32506 : r32509;
double r32511 = r32489 ? r32505 : r32510;
double r32512 = r32464 ? r32487 : r32511;
return r32512;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -5.105369019268964e+141Initial program 60.4
Simplified60.4
Taylor expanded around -inf 10.6
Simplified10.6
if -5.105369019268964e+141 < b < 5.1397209577748005e+144Initial program 8.2
Simplified8.2
rmApplied add-cube-cbrt8.4
Applied sqrt-prod8.4
Simplified8.4
rmApplied add-sqr-sqrt8.4
Applied cbrt-prod8.4
rmApplied add-sqr-sqrt8.4
Applied sqrt-prod8.4
rmApplied add-cube-cbrt8.4
if 5.1397209577748005e+144 < b Initial program 36.4
Simplified36.4
Taylor expanded around inf 6.1
Simplified6.1
Final simplification8.3
herbie shell --seed 2019325 +o rules:numerics
(FPCore (a b c)
:name "jeff quadratic root 2"
:precision binary64
(if (>= b 0.0) (/ (* 2 c) (- (- b) (sqrt (- (* b b) (* (* 4 a) c))))) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a))))