\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -2.086872071402004108381543238220970134651 \cdot 10^{144}:\\
\;\;\;\;0.5 \cdot \frac{c}{b} - 0.6666666666666666296592325124947819858789 \cdot \frac{b}{a}\\
\mathbf{elif}\;b \le 1.388070047225937856958905133202240499626 \cdot 10^{-143}:\\
\;\;\;\;\frac{\frac{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b}{3}}{a}\\
\mathbf{else}:\\
\;\;\;\;-0.5 \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r136279 = b;
double r136280 = -r136279;
double r136281 = r136279 * r136279;
double r136282 = 3.0;
double r136283 = a;
double r136284 = r136282 * r136283;
double r136285 = c;
double r136286 = r136284 * r136285;
double r136287 = r136281 - r136286;
double r136288 = sqrt(r136287);
double r136289 = r136280 + r136288;
double r136290 = r136289 / r136284;
return r136290;
}
double f(double a, double b, double c) {
double r136291 = b;
double r136292 = -2.086872071402004e+144;
bool r136293 = r136291 <= r136292;
double r136294 = 0.5;
double r136295 = c;
double r136296 = r136295 / r136291;
double r136297 = r136294 * r136296;
double r136298 = 0.6666666666666666;
double r136299 = a;
double r136300 = r136291 / r136299;
double r136301 = r136298 * r136300;
double r136302 = r136297 - r136301;
double r136303 = 1.3880700472259379e-143;
bool r136304 = r136291 <= r136303;
double r136305 = r136291 * r136291;
double r136306 = 3.0;
double r136307 = r136306 * r136299;
double r136308 = r136307 * r136295;
double r136309 = r136305 - r136308;
double r136310 = sqrt(r136309);
double r136311 = r136310 - r136291;
double r136312 = r136311 / r136306;
double r136313 = r136312 / r136299;
double r136314 = -0.5;
double r136315 = r136314 * r136296;
double r136316 = r136304 ? r136313 : r136315;
double r136317 = r136293 ? r136302 : r136316;
return r136317;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < -2.086872071402004e+144Initial program 60.3
Taylor expanded around -inf 2.8
if -2.086872071402004e+144 < b < 1.3880700472259379e-143Initial program 11.6
Simplified11.7
if 1.3880700472259379e-143 < b Initial program 50.2
Taylor expanded around inf 12.6
Final simplification11.1
herbie shell --seed 2019351
(FPCore (a b c)
:name "Cubic critical"
:precision binary64
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))