\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 -9.912992538019245038104285116114079132063 \cdot 10^{108}:\\
\;\;\;\;\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{2}{\frac{b}{a \cdot c}}\right)}\\
\end{array}\\
\mathbf{elif}\;b \le 1.042426094136287989665052757228371789389 \cdot 10^{152}:\\
\;\;\;\;\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{\left(-b\right) - \left(b - \frac{a \cdot c}{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 r1107310 = b;
double r1107311 = 0.0;
bool r1107312 = r1107310 >= r1107311;
double r1107313 = -r1107310;
double r1107314 = r1107310 * r1107310;
double r1107315 = 4.0;
double r1107316 = a;
double r1107317 = r1107315 * r1107316;
double r1107318 = c;
double r1107319 = r1107317 * r1107318;
double r1107320 = r1107314 - r1107319;
double r1107321 = sqrt(r1107320);
double r1107322 = r1107313 - r1107321;
double r1107323 = 2.0;
double r1107324 = r1107323 * r1107316;
double r1107325 = r1107322 / r1107324;
double r1107326 = r1107323 * r1107318;
double r1107327 = r1107313 + r1107321;
double r1107328 = r1107326 / r1107327;
double r1107329 = r1107312 ? r1107325 : r1107328;
return r1107329;
}
double f(double a, double b, double c) {
double r1107330 = b;
double r1107331 = -9.912992538019245e+108;
bool r1107332 = r1107330 <= r1107331;
double r1107333 = 0.0;
bool r1107334 = r1107330 >= r1107333;
double r1107335 = -r1107330;
double r1107336 = r1107330 * r1107330;
double r1107337 = 4.0;
double r1107338 = a;
double r1107339 = r1107337 * r1107338;
double r1107340 = c;
double r1107341 = r1107339 * r1107340;
double r1107342 = r1107336 - r1107341;
double r1107343 = sqrt(r1107342);
double r1107344 = r1107335 - r1107343;
double r1107345 = 2.0;
double r1107346 = r1107345 * r1107338;
double r1107347 = r1107344 / r1107346;
double r1107348 = r1107340 * r1107345;
double r1107349 = -2.0;
double r1107350 = r1107338 * r1107340;
double r1107351 = r1107330 / r1107350;
double r1107352 = r1107345 / r1107351;
double r1107353 = fma(r1107349, r1107330, r1107352);
double r1107354 = r1107348 / r1107353;
double r1107355 = r1107334 ? r1107347 : r1107354;
double r1107356 = 1.042426094136288e+152;
bool r1107357 = r1107330 <= r1107356;
double r1107358 = sqrt(r1107343);
double r1107359 = r1107358 * r1107358;
double r1107360 = r1107335 + r1107359;
double r1107361 = r1107348 / r1107360;
double r1107362 = r1107334 ? r1107347 : r1107361;
double r1107363 = r1107350 / r1107330;
double r1107364 = r1107363 * r1107345;
double r1107365 = r1107330 - r1107364;
double r1107366 = r1107335 - r1107365;
double r1107367 = r1107366 / r1107346;
double r1107368 = r1107343 + r1107335;
double r1107369 = r1107348 / r1107368;
double r1107370 = r1107334 ? r1107367 : r1107369;
double r1107371 = r1107357 ? r1107362 : r1107370;
double r1107372 = r1107332 ? r1107355 : r1107371;
return r1107372;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -9.912992538019245e+108Initial program 31.3
rmApplied add-sqr-sqrt31.3
Applied sqrt-prod31.3
Taylor expanded around -inf 6.6
Simplified6.6
if -9.912992538019245e+108 < b < 1.042426094136288e+152Initial program 8.8
rmApplied add-sqr-sqrt8.8
Applied sqrt-prod8.9
if 1.042426094136288e+152 < b Initial program 62.9
Taylor expanded around inf 11.0
Final simplification8.6
herbie shell --seed 2019172 +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)))))))