\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.434128173054205306503791529718852543763 \cdot 10^{153}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \sqrt{\frac{{b}^{4} - \left(\left(4 \cdot a\right) \cdot c\right) \cdot \left(\left(4 \cdot a\right) \cdot c\right)}{b \cdot b + \left(4 \cdot a\right) \cdot c}}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{2 \cdot \left(a \cdot \frac{c}{b}\right) - 2 \cdot b}\\
\end{array}\\
\mathbf{elif}\;b \le -5.066042609614386619694957941213132915138 \cdot 10^{-310} \lor \neg \left(b \le 5.031608061939102936286074782173578716838 \cdot 10^{53}\right):\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \left(b - 2 \cdot \frac{a \cdot c}{b}\right)}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{2 \cdot c}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - b}\\
\end{array}\\
\mathbf{elif}\;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}{2 \cdot e^{\log \left(a \cdot \frac{c}{b}\right)} - 2 \cdot b}\\
\end{array}double f(double a, double b, double c) {
double r32170 = b;
double r32171 = 0.0;
bool r32172 = r32170 >= r32171;
double r32173 = -r32170;
double r32174 = r32170 * r32170;
double r32175 = 4.0;
double r32176 = a;
double r32177 = r32175 * r32176;
double r32178 = c;
double r32179 = r32177 * r32178;
double r32180 = r32174 - r32179;
double r32181 = sqrt(r32180);
double r32182 = r32173 - r32181;
double r32183 = 2.0;
double r32184 = r32183 * r32176;
double r32185 = r32182 / r32184;
double r32186 = r32183 * r32178;
double r32187 = r32173 + r32181;
double r32188 = r32186 / r32187;
double r32189 = r32172 ? r32185 : r32188;
return r32189;
}
double f(double a, double b, double c) {
double r32190 = b;
double r32191 = -1.4341281730542053e+153;
bool r32192 = r32190 <= r32191;
double r32193 = 0.0;
bool r32194 = r32190 >= r32193;
double r32195 = -r32190;
double r32196 = 4.0;
double r32197 = pow(r32190, r32196);
double r32198 = 4.0;
double r32199 = a;
double r32200 = r32198 * r32199;
double r32201 = c;
double r32202 = r32200 * r32201;
double r32203 = r32202 * r32202;
double r32204 = r32197 - r32203;
double r32205 = r32190 * r32190;
double r32206 = r32205 + r32202;
double r32207 = r32204 / r32206;
double r32208 = sqrt(r32207);
double r32209 = r32195 - r32208;
double r32210 = 2.0;
double r32211 = r32210 * r32199;
double r32212 = r32209 / r32211;
double r32213 = r32210 * r32201;
double r32214 = r32201 / r32190;
double r32215 = r32199 * r32214;
double r32216 = r32210 * r32215;
double r32217 = 2.0;
double r32218 = r32217 * r32190;
double r32219 = r32216 - r32218;
double r32220 = r32213 / r32219;
double r32221 = r32194 ? r32212 : r32220;
double r32222 = -5.0660426096144e-310;
bool r32223 = r32190 <= r32222;
double r32224 = 5.031608061939103e+53;
bool r32225 = r32190 <= r32224;
double r32226 = !r32225;
bool r32227 = r32223 || r32226;
double r32228 = r32199 * r32201;
double r32229 = r32228 / r32190;
double r32230 = r32210 * r32229;
double r32231 = r32190 - r32230;
double r32232 = r32195 - r32231;
double r32233 = r32232 / r32211;
double r32234 = r32205 - r32202;
double r32235 = sqrt(r32234);
double r32236 = r32235 - r32190;
double r32237 = r32213 / r32236;
double r32238 = r32194 ? r32233 : r32237;
double r32239 = r32195 - r32235;
double r32240 = r32239 / r32211;
double r32241 = log(r32215);
double r32242 = exp(r32241);
double r32243 = r32210 * r32242;
double r32244 = r32243 - r32218;
double r32245 = r32213 / r32244;
double r32246 = r32194 ? r32240 : r32245;
double r32247 = r32227 ? r32238 : r32246;
double r32248 = r32192 ? r32221 : r32247;
return r32248;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -1.4341281730542053e+153Initial program 39.5
Simplified39.5
rmApplied add-sqr-sqrt39.5
Applied sqrt-prod39.5
Taylor expanded around -inf 6.6
rmApplied *-un-lft-identity6.6
Applied times-frac1.4
Simplified1.4
rmApplied flip--1.4
Simplified1.4
if -1.4341281730542053e+153 < b < -5.0660426096144e-310 or 5.031608061939103e+53 < b Initial program 18.7
Simplified18.7
Taylor expanded around inf 8.8
if -5.0660426096144e-310 < b < 5.031608061939103e+53Initial program 10.0
Simplified10.0
rmApplied add-sqr-sqrt10.0
Applied sqrt-prod10.0
Taylor expanded around -inf 10.0
rmApplied *-un-lft-identity10.0
Applied times-frac10.0
Simplified10.0
rmApplied add-exp-log10.0
Applied add-exp-log10.0
Applied div-exp10.0
Applied add-exp-log10.0
Applied prod-exp10.0
Simplified10.0
Final simplification7.8
herbie shell --seed 2019326
(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)))))))