\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.001614548699194859283576053421427332068561:\\
\;\;\;\;\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 r60031 = b;
double r60032 = -r60031;
double r60033 = r60031 * r60031;
double r60034 = 3.0;
double r60035 = a;
double r60036 = r60034 * r60035;
double r60037 = c;
double r60038 = r60036 * r60037;
double r60039 = r60033 - r60038;
double r60040 = sqrt(r60039);
double r60041 = r60032 + r60040;
double r60042 = r60041 / r60036;
return r60042;
}
double f(double a, double b, double c) {
double r60043 = b;
double r60044 = 0.0016145486991948593;
bool r60045 = r60043 <= r60044;
double r60046 = r60043 * r60043;
double r60047 = 3.0;
double r60048 = a;
double r60049 = r60047 * r60048;
double r60050 = c;
double r60051 = r60049 * r60050;
double r60052 = r60046 - r60051;
double r60053 = sqrt(r60052);
double r60054 = r60053 - r60043;
double r60055 = r60054 / r60047;
double r60056 = r60055 / r60048;
double r60057 = -0.5;
double r60058 = r60050 / r60043;
double r60059 = r60057 * r60058;
double r60060 = r60045 ? r60056 : r60059;
return r60060;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
if b < 0.0016145486991948593Initial program 20.1
Simplified20.1
rmApplied associate-/r*20.1
if 0.0016145486991948593 < b Initial program 45.9
Simplified45.9
Taylor expanded around inf 10.5
Final simplification11.4
herbie shell --seed 2019306 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e15) (< 1.11022e-16 b 9.0072e15) (< 1.11022e-16 c 9.0072e15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))