\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{\sqrt[3]{\mathsf{fma}\left(\left(\sqrt{\sqrt{\mathsf{fma}\left(c, \left(a \cdot -3\right), \left(b \cdot b\right)\right)}}\right), \left(\sqrt{\sqrt{\mathsf{fma}\left(c, \left(a \cdot -3\right), \left(b \cdot b\right)\right)}}\right), \left(-b\right)\right)}}{a} \cdot \frac{\sqrt[3]{\sqrt[3]{\mathsf{fma}\left(\left(\sqrt{\sqrt{\mathsf{fma}\left(c, \left(a \cdot -3\right), \left(b \cdot b\right)\right)}}\right), \left(\sqrt{\sqrt{\mathsf{fma}\left(c, \left(a \cdot -3\right), \left(b \cdot b\right)\right)}}\right), \left(-b\right)\right)} \cdot \left(\sqrt[3]{\mathsf{fma}\left(\left(\sqrt{\sqrt{\mathsf{fma}\left(c, \left(a \cdot -3\right), \left(b \cdot b\right)\right)}}\right), \left(\sqrt{\sqrt{\mathsf{fma}\left(c, \left(a \cdot -3\right), \left(b \cdot b\right)\right)}}\right), \left(-b\right)\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\left(\sqrt{\sqrt{\mathsf{fma}\left(c, \left(a \cdot -3\right), \left(b \cdot b\right)\right)}}\right), \left(\sqrt{\sqrt{\mathsf{fma}\left(c, \left(a \cdot -3\right), \left(b \cdot b\right)\right)}}\right), \left(-b\right)\right)}\right)} \cdot \sqrt[3]{\mathsf{fma}\left(\left(\sqrt{\sqrt{\mathsf{fma}\left(c, \left(a \cdot -3\right), \left(b \cdot b\right)\right)}}\right), \left(\sqrt{\sqrt{\mathsf{fma}\left(c, \left(a \cdot -3\right), \left(b \cdot b\right)\right)}}\right), \left(-b\right)\right)}}{3}double f(double a, double b, double c, double __attribute__((unused)) d) {
double r4004926 = b;
double r4004927 = -r4004926;
double r4004928 = r4004926 * r4004926;
double r4004929 = 3.0;
double r4004930 = a;
double r4004931 = r4004929 * r4004930;
double r4004932 = c;
double r4004933 = r4004931 * r4004932;
double r4004934 = r4004928 - r4004933;
double r4004935 = sqrt(r4004934);
double r4004936 = r4004927 + r4004935;
double r4004937 = r4004936 / r4004931;
return r4004937;
}
double f(double a, double b, double c, double __attribute__((unused)) d) {
double r4004938 = c;
double r4004939 = a;
double r4004940 = -3.0;
double r4004941 = r4004939 * r4004940;
double r4004942 = b;
double r4004943 = r4004942 * r4004942;
double r4004944 = fma(r4004938, r4004941, r4004943);
double r4004945 = sqrt(r4004944);
double r4004946 = sqrt(r4004945);
double r4004947 = -r4004942;
double r4004948 = fma(r4004946, r4004946, r4004947);
double r4004949 = cbrt(r4004948);
double r4004950 = r4004949 / r4004939;
double r4004951 = r4004949 * r4004949;
double r4004952 = r4004949 * r4004951;
double r4004953 = cbrt(r4004952);
double r4004954 = r4004953 * r4004949;
double r4004955 = 3.0;
double r4004956 = r4004954 / r4004955;
double r4004957 = r4004950 * r4004956;
return r4004957;
}



Bits error versus a



Bits error versus b



Bits error versus c



Bits error versus d
Initial program 44.2
Simplified44.2
rmApplied add-sqr-sqrt44.1
Applied fma-neg43.5
rmApplied add-cube-cbrt43.5
Applied times-frac43.5
rmApplied add-cube-cbrt43.5
Final simplification43.5
herbie shell --seed 2019133 +o rules:numerics
(FPCore (a b c d)
: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)))