\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 -1.39530753508131067 \cdot 10^{151}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\frac{2 \cdot c}{\sqrt[3]{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}} \cdot \sqrt[3]{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}}{\sqrt[3]{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}\\
\mathbf{elif}\;b \le -5.50995912690988267 \cdot 10^{-302}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{2 \cdot \frac{a \cdot c}{b} - 2 \cdot b}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\end{array}\\
\mathbf{elif}\;b \le 8.4679895979154315 \cdot 10^{133}:\\
\;\;\;\;\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(b, b, -\left(b \cdot b - \left(4 \cdot a\right) \cdot c\right)\right)}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}}{2 \cdot a}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{2 \cdot \frac{a \cdot c}{b} - 2 \cdot b}\\
\mathbf{else}:\\
\;\;\;\;\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\\
\end{array}double f(double a, double b, double c) {
double r28389 = b;
double r28390 = 0.0;
bool r28391 = r28389 >= r28390;
double r28392 = 2.0;
double r28393 = c;
double r28394 = r28392 * r28393;
double r28395 = -r28389;
double r28396 = r28389 * r28389;
double r28397 = 4.0;
double r28398 = a;
double r28399 = r28397 * r28398;
double r28400 = r28399 * r28393;
double r28401 = r28396 - r28400;
double r28402 = sqrt(r28401);
double r28403 = r28395 - r28402;
double r28404 = r28394 / r28403;
double r28405 = r28395 + r28402;
double r28406 = r28392 * r28398;
double r28407 = r28405 / r28406;
double r28408 = r28391 ? r28404 : r28407;
return r28408;
}
double f(double a, double b, double c) {
double r28409 = b;
double r28410 = -1.3953075350813107e+151;
bool r28411 = r28409 <= r28410;
double r28412 = 0.0;
bool r28413 = r28409 >= r28412;
double r28414 = 2.0;
double r28415 = c;
double r28416 = r28414 * r28415;
double r28417 = -r28409;
double r28418 = r28409 * r28409;
double r28419 = 4.0;
double r28420 = a;
double r28421 = r28419 * r28420;
double r28422 = r28421 * r28415;
double r28423 = r28418 - r28422;
double r28424 = sqrt(r28423);
double r28425 = r28417 - r28424;
double r28426 = cbrt(r28425);
double r28427 = r28426 * r28426;
double r28428 = r28416 / r28427;
double r28429 = r28428 / r28426;
double r28430 = 1.0;
double r28431 = r28415 / r28409;
double r28432 = r28409 / r28420;
double r28433 = r28431 - r28432;
double r28434 = r28430 * r28433;
double r28435 = r28413 ? r28429 : r28434;
double r28436 = -5.509959126909883e-302;
bool r28437 = r28409 <= r28436;
double r28438 = r28420 * r28415;
double r28439 = r28438 / r28409;
double r28440 = r28414 * r28439;
double r28441 = 2.0;
double r28442 = r28441 * r28409;
double r28443 = r28440 - r28442;
double r28444 = r28416 / r28443;
double r28445 = r28417 + r28424;
double r28446 = r28414 * r28420;
double r28447 = r28445 / r28446;
double r28448 = r28413 ? r28444 : r28447;
double r28449 = 8.467989597915432e+133;
bool r28450 = r28409 <= r28449;
double r28451 = r28416 / r28425;
double r28452 = -r28423;
double r28453 = fma(r28409, r28409, r28452);
double r28454 = r28453 / r28425;
double r28455 = r28454 / r28446;
double r28456 = r28413 ? r28451 : r28455;
double r28457 = r28450 ? r28456 : r28448;
double r28458 = r28437 ? r28448 : r28457;
double r28459 = r28411 ? r28435 : r28458;
return r28459;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -1.3953075350813107e+151Initial program 62.9
Taylor expanded around -inf 10.8
Taylor expanded around 0 1.9
Simplified1.9
rmApplied add-cube-cbrt1.9
Applied associate-/r*1.9
if -1.3953075350813107e+151 < b < -5.509959126909883e-302 or 8.467989597915432e+133 < b Initial program 19.5
Taylor expanded around inf 8.4
if -5.509959126909883e-302 < b < 8.467989597915432e+133Initial program 8.8
rmApplied flip-+8.8
Simplified8.8
Final simplification7.8
herbie shell --seed 2020034 +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))))