\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\left(\sqrt[3]{\frac{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, -b\right)}{3 \cdot a}} \cdot \sqrt[3]{\frac{\sqrt[3]{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, -b\right) \cdot \left(\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, -b\right) \cdot \mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, -b\right)\right)}}{3 \cdot a}}\right) \cdot \sqrt[3]{\frac{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, -b\right)}{3 \cdot a}}double f(double a, double b, double c) {
double r3904218 = b;
double r3904219 = -r3904218;
double r3904220 = r3904218 * r3904218;
double r3904221 = 3.0;
double r3904222 = a;
double r3904223 = r3904221 * r3904222;
double r3904224 = c;
double r3904225 = r3904223 * r3904224;
double r3904226 = r3904220 - r3904225;
double r3904227 = sqrt(r3904226);
double r3904228 = r3904219 + r3904227;
double r3904229 = r3904228 / r3904223;
return r3904229;
}
double f(double a, double b, double c) {
double r3904230 = -3.0;
double r3904231 = a;
double r3904232 = c;
double r3904233 = r3904231 * r3904232;
double r3904234 = b;
double r3904235 = r3904234 * r3904234;
double r3904236 = fma(r3904230, r3904233, r3904235);
double r3904237 = sqrt(r3904236);
double r3904238 = sqrt(r3904237);
double r3904239 = -r3904234;
double r3904240 = fma(r3904238, r3904238, r3904239);
double r3904241 = 3.0;
double r3904242 = r3904241 * r3904231;
double r3904243 = r3904240 / r3904242;
double r3904244 = cbrt(r3904243);
double r3904245 = r3904240 * r3904240;
double r3904246 = r3904240 * r3904245;
double r3904247 = cbrt(r3904246);
double r3904248 = r3904247 / r3904242;
double r3904249 = cbrt(r3904248);
double r3904250 = r3904244 * r3904249;
double r3904251 = r3904250 * r3904244;
return r3904251;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 53.0
Simplified53.0
rmApplied add-sqr-sqrt53.0
Applied sqrt-prod52.7
Applied fma-neg52.2
rmApplied add-cube-cbrt52.2
rmApplied add-cbrt-cube52.2
Final simplification52.2
herbie shell --seed 2019168 +o rules:numerics
(FPCore (a b c)
:name "Cubic critical, wide range"
:pre (and (< 4.930380657631324e-32 a 2.028240960365167e+31) (< 4.930380657631324e-32 b 2.028240960365167e+31) (< 4.930380657631324e-32 c 2.028240960365167e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))