\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(b, b, \left(-3 \cdot a\right) \cdot c\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(-3, a \cdot c, b \cdot b\right)}}, -b\right) \cdot \left(\frac{\sqrt{\frac{1}{3}}}{\sqrt[3]{a}} \cdot \frac{\frac{\sqrt{\frac{1}{3}}}{\sqrt[3]{a}}}{\sqrt[3]{a}}\right)double f(double a, double b, double c) {
double r3554883 = b;
double r3554884 = -r3554883;
double r3554885 = r3554883 * r3554883;
double r3554886 = 3.0;
double r3554887 = a;
double r3554888 = r3554886 * r3554887;
double r3554889 = c;
double r3554890 = r3554888 * r3554889;
double r3554891 = r3554885 - r3554890;
double r3554892 = sqrt(r3554891);
double r3554893 = r3554884 + r3554892;
double r3554894 = r3554893 / r3554888;
return r3554894;
}
double f(double a, double b, double c) {
double r3554895 = b;
double r3554896 = -3.0;
double r3554897 = a;
double r3554898 = r3554896 * r3554897;
double r3554899 = c;
double r3554900 = r3554898 * r3554899;
double r3554901 = fma(r3554895, r3554895, r3554900);
double r3554902 = sqrt(r3554901);
double r3554903 = sqrt(r3554902);
double r3554904 = r3554897 * r3554899;
double r3554905 = r3554895 * r3554895;
double r3554906 = fma(r3554896, r3554904, r3554905);
double r3554907 = sqrt(r3554906);
double r3554908 = sqrt(r3554907);
double r3554909 = -r3554895;
double r3554910 = fma(r3554903, r3554908, r3554909);
double r3554911 = 0.3333333333333333;
double r3554912 = sqrt(r3554911);
double r3554913 = cbrt(r3554897);
double r3554914 = r3554912 / r3554913;
double r3554915 = r3554914 / r3554913;
double r3554916 = r3554914 * r3554915;
double r3554917 = r3554910 * r3554916;
return r3554917;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 52.3
Simplified52.3
rmApplied add-sqr-sqrt52.3
Applied sqrt-prod52.1
Applied fma-neg51.5
Taylor expanded around 0 51.5
Simplified51.5
rmApplied div-inv51.5
Simplified51.5
rmApplied add-cube-cbrt51.5
Applied add-sqr-sqrt51.5
Applied times-frac51.5
Simplified51.5
Final simplification51.5
herbie shell --seed 2019164 +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)))