\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 -1.328348355692401367625700175591396004283 \cdot 10^{154}:\\
\;\;\;\;\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) + \left(2 \cdot \frac{a \cdot c}{b} - b\right)}\\
\end{array}\\
\mathbf{elif}\;b \le 5.087167594777058298421977950126108150191 \cdot 10^{91}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - e^{\log \left(\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}}{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}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{\left(-b\right) + \sqrt{\left(\sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c} \cdot \sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}\right) \cdot \sqrt[3]{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\
\end{array}double f(double a, double b, double c) {
double r33235 = b;
double r33236 = 0.0;
bool r33237 = r33235 >= r33236;
double r33238 = -r33235;
double r33239 = r33235 * r33235;
double r33240 = 4.0;
double r33241 = a;
double r33242 = r33240 * r33241;
double r33243 = c;
double r33244 = r33242 * r33243;
double r33245 = r33239 - r33244;
double r33246 = sqrt(r33245);
double r33247 = r33238 - r33246;
double r33248 = 2.0;
double r33249 = r33248 * r33241;
double r33250 = r33247 / r33249;
double r33251 = r33248 * r33243;
double r33252 = r33238 + r33246;
double r33253 = r33251 / r33252;
double r33254 = r33237 ? r33250 : r33253;
return r33254;
}
double f(double a, double b, double c) {
double r33255 = b;
double r33256 = -1.3283483556924014e+154;
bool r33257 = r33255 <= r33256;
double r33258 = 0.0;
bool r33259 = r33255 >= r33258;
double r33260 = -r33255;
double r33261 = r33255 * r33255;
double r33262 = 4.0;
double r33263 = a;
double r33264 = r33262 * r33263;
double r33265 = c;
double r33266 = r33264 * r33265;
double r33267 = r33261 - r33266;
double r33268 = sqrt(r33267);
double r33269 = r33260 - r33268;
double r33270 = 2.0;
double r33271 = r33270 * r33263;
double r33272 = r33269 / r33271;
double r33273 = r33270 * r33265;
double r33274 = r33263 * r33265;
double r33275 = r33274 / r33255;
double r33276 = r33270 * r33275;
double r33277 = r33276 - r33255;
double r33278 = r33260 + r33277;
double r33279 = r33273 / r33278;
double r33280 = r33259 ? r33272 : r33279;
double r33281 = 5.087167594777058e+91;
bool r33282 = r33255 <= r33281;
double r33283 = log(r33268);
double r33284 = exp(r33283);
double r33285 = r33260 - r33284;
double r33286 = r33285 / r33271;
double r33287 = r33260 + r33268;
double r33288 = r33273 / r33287;
double r33289 = r33259 ? r33286 : r33288;
double r33290 = 1.0;
double r33291 = r33265 / r33255;
double r33292 = r33255 / r33263;
double r33293 = r33291 - r33292;
double r33294 = r33290 * r33293;
double r33295 = cbrt(r33267);
double r33296 = r33295 * r33295;
double r33297 = r33296 * r33295;
double r33298 = sqrt(r33297);
double r33299 = r33260 + r33298;
double r33300 = r33273 / r33299;
double r33301 = r33259 ? r33294 : r33300;
double r33302 = r33282 ? r33289 : r33301;
double r33303 = r33257 ? r33280 : r33302;
return r33303;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -1.3283483556924014e+154Initial program 37.6
Taylor expanded around -inf 7.0
if -1.3283483556924014e+154 < b < 5.087167594777058e+91Initial program 8.5
rmApplied add-exp-log9.9
if 5.087167594777058e+91 < b Initial program 44.5
Taylor expanded around inf 10.1
Taylor expanded around 0 3.5
Simplified3.5
rmApplied add-cube-cbrt3.5
Final simplification8.4
herbie shell --seed 2019347
(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)))))))