\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\begin{array}{l}
\mathbf{if}\;\frac{\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} + \left(-b\right)}{3 \cdot a} \le -1.7067760235555535 \cdot 10^{-08}:\\
\;\;\;\;\frac{\frac{\left(b \cdot b - \left(3 \cdot a\right) \cdot c\right) \cdot \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c} - b \cdot \left(b \cdot b\right)}{\mathsf{fma}\left(b, b, \mathsf{fma}\left(b, b, -3 \cdot \left(c \cdot a\right)\right)\right) + b \cdot \sqrt{\mathsf{fma}\left(b, b, -3 \cdot \left(c \cdot a\right)\right)}}}{3 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-1}{2} \cdot \frac{c}{b}\\
\end{array}double f(double a, double b, double c) {
double r1879165 = b;
double r1879166 = -r1879165;
double r1879167 = r1879165 * r1879165;
double r1879168 = 3.0;
double r1879169 = a;
double r1879170 = r1879168 * r1879169;
double r1879171 = c;
double r1879172 = r1879170 * r1879171;
double r1879173 = r1879167 - r1879172;
double r1879174 = sqrt(r1879173);
double r1879175 = r1879166 + r1879174;
double r1879176 = r1879175 / r1879170;
return r1879176;
}
double f(double a, double b, double c) {
double r1879177 = b;
double r1879178 = r1879177 * r1879177;
double r1879179 = 3.0;
double r1879180 = a;
double r1879181 = r1879179 * r1879180;
double r1879182 = c;
double r1879183 = r1879181 * r1879182;
double r1879184 = r1879178 - r1879183;
double r1879185 = sqrt(r1879184);
double r1879186 = -r1879177;
double r1879187 = r1879185 + r1879186;
double r1879188 = r1879187 / r1879181;
double r1879189 = -1.7067760235555535e-08;
bool r1879190 = r1879188 <= r1879189;
double r1879191 = r1879184 * r1879185;
double r1879192 = r1879177 * r1879178;
double r1879193 = r1879191 - r1879192;
double r1879194 = -3.0;
double r1879195 = r1879182 * r1879180;
double r1879196 = r1879194 * r1879195;
double r1879197 = fma(r1879177, r1879177, r1879196);
double r1879198 = fma(r1879177, r1879177, r1879197);
double r1879199 = sqrt(r1879197);
double r1879200 = r1879177 * r1879199;
double r1879201 = r1879198 + r1879200;
double r1879202 = r1879193 / r1879201;
double r1879203 = r1879202 / r1879181;
double r1879204 = -0.5;
double r1879205 = r1879182 / r1879177;
double r1879206 = r1879204 * r1879205;
double r1879207 = r1879190 ? r1879203 : r1879206;
return r1879207;
}



Bits error versus a



Bits error versus b



Bits error versus c
if (/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)) < -1.7067760235555535e-08Initial program 21.6
rmApplied flip3-+21.7
Simplified21.0
Simplified21.0
if -1.7067760235555535e-08 < (/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)) Initial program 54.9
Taylor expanded around inf 4.3
Final simplification9.7
herbie shell --seed 2019154 +o rules:numerics
(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)))