\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.227893547082757383910869715431246603409 \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{c \cdot 2}{\left(-b\right) + \mathsf{fma}\left(2, \frac{c}{\frac{b}{a}}, -b\right)}\\
\end{array}\\
\mathbf{elif}\;b \le 3.628799960716311990444092539387346352569 \cdot 10^{50}:\\
\;\;\;\;\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(\sqrt{-b}, \sqrt{-b}, \sqrt{\left(\sqrt[3]{\mathsf{fma}\left(b, b, -\left(4 \cdot a\right) \cdot c\right)} \cdot \left(\sqrt[3]{\sqrt[3]{\mathsf{fma}\left(4 \cdot a, -c, b \cdot b\right)} \cdot \sqrt[3]{\mathsf{fma}\left(4 \cdot a, -c, b \cdot b\right)}} \cdot \sqrt[3]{\sqrt[3]{\mathsf{fma}\left(4 \cdot a, -c, b \cdot b\right)}}\right)\right) \cdot \sqrt[3]{\mathsf{fma}\left(b, b, -\left(4 \cdot a\right) \cdot c\right)}}\right)}\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{\left(-b\right) - \mathsf{fma}\left(-2, \frac{a}{\frac{b}{c}}, b\right)}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{c \cdot 2}{\mathsf{fma}\left(\sqrt{-b}, \sqrt{-b}, \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}\right)}\\
\end{array}double f(double a, double b, double c) {
double r40145 = b;
double r40146 = 0.0;
bool r40147 = r40145 >= r40146;
double r40148 = -r40145;
double r40149 = r40145 * r40145;
double r40150 = 4.0;
double r40151 = a;
double r40152 = r40150 * r40151;
double r40153 = c;
double r40154 = r40152 * r40153;
double r40155 = r40149 - r40154;
double r40156 = sqrt(r40155);
double r40157 = r40148 - r40156;
double r40158 = 2.0;
double r40159 = r40158 * r40151;
double r40160 = r40157 / r40159;
double r40161 = r40158 * r40153;
double r40162 = r40148 + r40156;
double r40163 = r40161 / r40162;
double r40164 = r40147 ? r40160 : r40163;
return r40164;
}
double f(double a, double b, double c) {
double r40165 = b;
double r40166 = -1.2278935470827574e+154;
bool r40167 = r40165 <= r40166;
double r40168 = 0.0;
bool r40169 = r40165 >= r40168;
double r40170 = -r40165;
double r40171 = r40165 * r40165;
double r40172 = 4.0;
double r40173 = a;
double r40174 = r40172 * r40173;
double r40175 = c;
double r40176 = r40174 * r40175;
double r40177 = r40171 - r40176;
double r40178 = sqrt(r40177);
double r40179 = r40170 - r40178;
double r40180 = 2.0;
double r40181 = r40180 * r40173;
double r40182 = r40179 / r40181;
double r40183 = r40175 * r40180;
double r40184 = r40165 / r40173;
double r40185 = r40175 / r40184;
double r40186 = fma(r40180, r40185, r40170);
double r40187 = r40170 + r40186;
double r40188 = r40183 / r40187;
double r40189 = r40169 ? r40182 : r40188;
double r40190 = 3.628799960716312e+50;
bool r40191 = r40165 <= r40190;
double r40192 = sqrt(r40170);
double r40193 = -r40176;
double r40194 = fma(r40165, r40165, r40193);
double r40195 = cbrt(r40194);
double r40196 = -r40175;
double r40197 = fma(r40174, r40196, r40171);
double r40198 = cbrt(r40197);
double r40199 = r40198 * r40198;
double r40200 = cbrt(r40199);
double r40201 = cbrt(r40198);
double r40202 = r40200 * r40201;
double r40203 = r40195 * r40202;
double r40204 = r40203 * r40195;
double r40205 = sqrt(r40204);
double r40206 = fma(r40192, r40192, r40205);
double r40207 = r40183 / r40206;
double r40208 = r40169 ? r40182 : r40207;
double r40209 = -r40180;
double r40210 = r40165 / r40175;
double r40211 = r40173 / r40210;
double r40212 = fma(r40209, r40211, r40165);
double r40213 = r40170 - r40212;
double r40214 = r40213 / r40181;
double r40215 = fma(r40192, r40192, r40178);
double r40216 = r40183 / r40215;
double r40217 = r40169 ? r40214 : r40216;
double r40218 = r40191 ? r40208 : r40217;
double r40219 = r40167 ? r40189 : r40218;
return r40219;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -1.2278935470827574e+154Initial program 37.9
Taylor expanded around -inf 6.0
Simplified1.2
if -1.2278935470827574e+154 < b < 3.628799960716312e+50Initial program 8.4
rmApplied add-sqr-sqrt8.5
Applied fma-def8.4
rmApplied add-cube-cbrt8.7
Simplified8.7
Simplified8.7
rmApplied add-cube-cbrt8.7
Applied cbrt-prod8.7
Simplified8.7
Simplified8.7
if 3.628799960716312e+50 < b Initial program 38.2
rmApplied add-sqr-sqrt38.2
Applied fma-def38.2
Taylor expanded around inf 11.3
Simplified6.2
Final simplification6.9
herbie shell --seed 2019179 +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)))))))