\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 -3.12428337420519208 \cdot 10^{57}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\left(\sqrt[3]{\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}} \cdot \sqrt[3]{\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\right) \cdot \sqrt[3]{\frac{2 \cdot c}{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}\\
\mathbf{elif}\;b \le -1.2159818839962 \cdot 10^{-310}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\frac{\left(4 \cdot a\right) \cdot c + b \cdot \left(b - b\right)}{\sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c} - 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 2.8436139815832302 \cdot 10^{57}:\\
\;\;\;\;\begin{array}{l}
\mathbf{if}\;b \ge 0.0:\\
\;\;\;\;\frac{1}{\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot c}}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}\\
\mathbf{elif}\;b \ge 0.0:\\
\;\;\;\;\frac{2 \cdot c}{\mathsf{fma}\left(2, \frac{a \cdot c}{b}, b \cdot -2\right)}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r41144 = b;
double r41145 = 0.0;
bool r41146 = r41144 >= r41145;
double r41147 = 2.0;
double r41148 = c;
double r41149 = r41147 * r41148;
double r41150 = -r41144;
double r41151 = r41144 * r41144;
double r41152 = 4.0;
double r41153 = a;
double r41154 = r41152 * r41153;
double r41155 = r41154 * r41148;
double r41156 = r41151 - r41155;
double r41157 = sqrt(r41156);
double r41158 = r41150 - r41157;
double r41159 = r41149 / r41158;
double r41160 = r41150 + r41157;
double r41161 = r41147 * r41153;
double r41162 = r41160 / r41161;
double r41163 = r41146 ? r41159 : r41162;
return r41163;
}
double f(double a, double b, double c) {
double r41164 = b;
double r41165 = -3.124283374205192e+57;
bool r41166 = r41164 <= r41165;
double r41167 = 0.0;
bool r41168 = r41164 >= r41167;
double r41169 = 2.0;
double r41170 = c;
double r41171 = r41169 * r41170;
double r41172 = -r41164;
double r41173 = r41164 * r41164;
double r41174 = 4.0;
double r41175 = a;
double r41176 = r41175 * r41170;
double r41177 = r41174 * r41176;
double r41178 = r41173 - r41177;
double r41179 = sqrt(r41178);
double r41180 = r41172 - r41179;
double r41181 = r41171 / r41180;
double r41182 = cbrt(r41181);
double r41183 = r41182 * r41182;
double r41184 = r41183 * r41182;
double r41185 = 1.0;
double r41186 = r41170 / r41164;
double r41187 = r41164 / r41175;
double r41188 = r41186 - r41187;
double r41189 = r41185 * r41188;
double r41190 = r41168 ? r41184 : r41189;
double r41191 = -1.2159818839962e-310;
bool r41192 = r41164 <= r41191;
double r41193 = r41174 * r41175;
double r41194 = r41193 * r41170;
double r41195 = r41164 - r41164;
double r41196 = r41164 * r41195;
double r41197 = r41194 + r41196;
double r41198 = r41173 - r41194;
double r41199 = sqrt(r41198);
double r41200 = r41199 - r41164;
double r41201 = r41197 / r41200;
double r41202 = r41171 / r41201;
double r41203 = r41172 + r41199;
double r41204 = r41169 * r41175;
double r41205 = r41203 / r41204;
double r41206 = r41168 ? r41202 : r41205;
double r41207 = 2.8436139815832302e+57;
bool r41208 = r41164 <= r41207;
double r41209 = 1.0;
double r41210 = r41180 / r41171;
double r41211 = r41209 / r41210;
double r41212 = r41168 ? r41211 : r41189;
double r41213 = r41176 / r41164;
double r41214 = -2.0;
double r41215 = r41164 * r41214;
double r41216 = fma(r41169, r41213, r41215);
double r41217 = r41171 / r41216;
double r41218 = r41168 ? r41217 : r41189;
double r41219 = r41208 ? r41212 : r41218;
double r41220 = r41192 ? r41206 : r41219;
double r41221 = r41166 ? r41190 : r41220;
return r41221;
}



Bits error versus a



Bits error versus b



Bits error versus c
if b < -3.124283374205192e+57Initial program 39.5
Taylor expanded around -inf 11.5
Simplified11.5
Taylor expanded around 0 5.4
Simplified5.4
rmApplied associate-*l*5.4
rmApplied add-cube-cbrt5.4
if -3.124283374205192e+57 < b < -1.2159818839962e-310Initial program 8.8
rmApplied flip--8.8
Simplified8.8
Simplified8.8
if -1.2159818839962e-310 < b < 2.8436139815832302e+57Initial program 9.4
Taylor expanded around -inf 9.4
Simplified9.4
Taylor expanded around 0 9.4
Simplified9.4
rmApplied associate-*l*9.4
rmApplied clear-num9.8
if 2.8436139815832302e+57 < b Initial program 25.7
Taylor expanded around -inf 25.7
Simplified25.7
Taylor expanded around 0 25.7
Simplified25.7
Taylor expanded around inf 6.3
Simplified6.3
Final simplification7.7
herbie shell --seed 2020045 +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))))