double f(double a, double b, double c, double __attribute__((unused)) d) {
double r16268917 = b;
double r16268918 = -r16268917;
double r16268919 = r16268917 * r16268917;
double r16268920 = 3.0;
double r16268921 = a;
double r16268922 = r16268920 * r16268921;
double r16268923 = c;
double r16268924 = r16268922 * r16268923;
double r16268925 = r16268919 - r16268924;
double r16268926 = sqrt(r16268925);
double r16268927 = r16268918 + r16268926;
double r16268928 = r16268927 / r16268922;
return r16268928;
}
double f(double a, double b, double c, double __attribute__((unused)) d) {
double r16268929 = b;
double r16268930 = 818.4412850836019;
bool r16268931 = r16268929 <= r16268930;
double r16268932 = a;
double r16268933 = -3.0;
double r16268934 = c;
double r16268935 = r16268933 * r16268934;
double r16268936 = r16268932 * r16268935;
double r16268937 = fma(r16268929, r16268929, r16268936);
double r16268938 = sqrt(r16268937);
double r16268939 = r16268938 * r16268937;
double r16268940 = r16268929 * r16268929;
double r16268941 = r16268940 * r16268929;
double r16268942 = r16268939 - r16268941;
double r16268943 = r16268932 * r16268934;
double r16268944 = fma(r16268933, r16268943, r16268940);
double r16268945 = sqrt(r16268944);
double r16268946 = r16268929 * r16268945;
double r16268947 = r16268946 + r16268940;
double r16268948 = r16268945 * r16268945;
double r16268949 = r16268947 + r16268948;
double r16268950 = 3.0;
double r16268951 = r16268950 * r16268932;
double r16268952 = r16268949 * r16268951;
double r16268953 = r16268942 / r16268952;
double r16268954 = sqrt(r16268945);
double r16268955 = -r16268929;
double r16268956 = fma(r16268954, r16268954, r16268955);
double r16268957 = r16268956 / r16268951;
double r16268958 = cbrt(r16268957);
double r16268959 = r16268958 * r16268958;
double r16268960 = -1.5;
double r16268961 = r16268960 * r16268934;
double r16268962 = r16268961 / r16268929;
double r16268963 = cbrt(r16268962);
double r16268964 = 0.3333333333333333;
double r16268965 = cbrt(r16268964);
double r16268966 = r16268963 * r16268965;
double r16268967 = r16268959 * r16268966;
double r16268968 = r16268931 ? r16268953 : r16268967;
return r16268968;
}
\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 818.4412850836019:\\
\;\;\;\;\frac{\sqrt{(b \cdot b + \left(a \cdot \left(-3 \cdot c\right)\right))_*} \cdot (b \cdot b + \left(a \cdot \left(-3 \cdot c\right)\right))_* - \left(b \cdot b\right) \cdot b}{\left(\left(b \cdot \sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*} + b \cdot b\right) + \sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*} \cdot \sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*}\right) \cdot \left(3 \cdot a\right)}\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt[3]{\frac{(\left(\sqrt{\sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*}}\right) \cdot \left(\sqrt{\sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*}}\right) + \left(-b\right))_*}{3 \cdot a}} \cdot \sqrt[3]{\frac{(\left(\sqrt{\sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*}}\right) \cdot \left(\sqrt{\sqrt{(-3 \cdot \left(a \cdot c\right) + \left(b \cdot b\right))_*}}\right) + \left(-b\right))_*}{3 \cdot a}}\right) \cdot \left(\sqrt[3]{\frac{\frac{-3}{2} \cdot c}{b}} \cdot \sqrt[3]{\frac{1}{3}}\right)\\
\end{array}


Bits error versus a



Bits error versus b



Bits error versus c



Bits error versus d
if b < 818.4412850836019Initial program 40.2
Simplified40.2
rmApplied flip3--40.2
Applied associate-/l/40.2
Simplified39.7
if 818.4412850836019 < b Initial program 55.8
Simplified55.8
rmApplied add-sqr-sqrt55.4
Applied fma-neg54.8
rmApplied add-cube-cbrt54.8
Taylor expanded around 0 63.6
Simplified54.2
Final simplification51.1
herbie shell --seed 2019101 +o rules:numerics
(FPCore (a b c d)
: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)))