\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 0.00010986090000445213:\\
\;\;\;\;\frac{\frac{\left(\left(a \cdot c\right) \cdot -3 + b \cdot b\right) \cdot \sqrt{\left(a \cdot c\right) \cdot -3 + b \cdot b} - b \cdot \left(b \cdot b\right)}{\left(\left(a \cdot c\right) \cdot -3 + b \cdot b\right) + \left(b \cdot b + b \cdot \sqrt{\left(a \cdot c\right) \cdot -3 + b \cdot b}\right)}}{a \cdot 3}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r4161271 = b;
double r4161272 = -r4161271;
double r4161273 = r4161271 * r4161271;
double r4161274 = 3.0;
double r4161275 = a;
double r4161276 = r4161274 * r4161275;
double r4161277 = c;
double r4161278 = r4161276 * r4161277;
double r4161279 = r4161273 - r4161278;
double r4161280 = sqrt(r4161279);
double r4161281 = r4161272 + r4161280;
double r4161282 = r4161281 / r4161276;
return r4161282;
}
double f(double a, double b, double c) {
double r4161283 = b;
double r4161284 = 0.00010986090000445213;
bool r4161285 = r4161283 <= r4161284;
double r4161286 = a;
double r4161287 = c;
double r4161288 = r4161286 * r4161287;
double r4161289 = -3.0;
double r4161290 = r4161288 * r4161289;
double r4161291 = r4161283 * r4161283;
double r4161292 = r4161290 + r4161291;
double r4161293 = sqrt(r4161292);
double r4161294 = r4161292 * r4161293;
double r4161295 = r4161283 * r4161291;
double r4161296 = r4161294 - r4161295;
double r4161297 = r4161283 * r4161293;
double r4161298 = r4161291 + r4161297;
double r4161299 = r4161292 + r4161298;
double r4161300 = r4161296 / r4161299;
double r4161301 = 3.0;
double r4161302 = r4161286 * r4161301;
double r4161303 = r4161300 / r4161302;
double r4161304 = -0.5;
double r4161305 = r4161287 / r4161283;
double r4161306 = r4161304 * r4161305;
double r4161307 = r4161285 ? r4161303 : r4161306;
return r4161307;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < 0.00010986090000445213Initial program 18.3
Simplified18.3
rmApplied flip3--18.4
Simplified17.7
Simplified17.7
if 0.00010986090000445213 < b Initial program 45.6
Simplified45.6
Taylor expanded around inf 10.7
Final simplification11.1
herbie shell --seed 2019141
(FPCore (a b c)
:name "Cubic critical, medium range"
:pre (and (< 1.1102230246251565e-16 a 9007199254740992.0) (< 1.1102230246251565e-16 b 9007199254740992.0) (< 1.1102230246251565e-16 c 9007199254740992.0))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))