\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 315.484838761318258:\\
\;\;\;\;\frac{\frac{\frac{\left(b \cdot b - \left(3 \cdot a\right) \cdot c\right) - b \cdot b}{\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 r84007 = b;
double r84008 = -r84007;
double r84009 = r84007 * r84007;
double r84010 = 3.0;
double r84011 = a;
double r84012 = r84010 * r84011;
double r84013 = c;
double r84014 = r84012 * r84013;
double r84015 = r84009 - r84014;
double r84016 = sqrt(r84015);
double r84017 = r84008 + r84016;
double r84018 = r84017 / r84012;
return r84018;
}
double f(double a, double b, double c) {
double r84019 = b;
double r84020 = 315.48483876131826;
bool r84021 = r84019 <= r84020;
double r84022 = r84019 * r84019;
double r84023 = 3.0;
double r84024 = a;
double r84025 = r84023 * r84024;
double r84026 = c;
double r84027 = r84025 * r84026;
double r84028 = r84022 - r84027;
double r84029 = r84028 - r84022;
double r84030 = sqrt(r84028);
double r84031 = r84030 + r84019;
double r84032 = r84029 / r84031;
double r84033 = r84032 / r84023;
double r84034 = r84033 / r84024;
double r84035 = -0.5;
double r84036 = r84026 / r84019;
double r84037 = r84035 * r84036;
double r84038 = r84021 ? r84034 : r84037;
return r84038;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < 315.48483876131826Initial program 16.4
Simplified16.5
rmApplied flip--16.4
Simplified15.4
if 315.48483876131826 < b Initial program 36.0
Simplified36.0
Taylor expanded around inf 16.5
Final simplification16.1
herbie shell --seed 2019195
(FPCore (a b c)
:name "Cubic critical, narrow range"
:pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3.0 a) c)))) (* 3.0 a)))