\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{\frac{\frac{\frac{1}{\sqrt[3]{1} \cdot \sqrt[3]{1}}}{\frac{2 \cdot a}{4 \cdot \left(a \cdot c\right)}}}{\sqrt[3]{1}}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r47859 = b;
double r47860 = -r47859;
double r47861 = r47859 * r47859;
double r47862 = 4.0;
double r47863 = a;
double r47864 = r47862 * r47863;
double r47865 = c;
double r47866 = r47864 * r47865;
double r47867 = r47861 - r47866;
double r47868 = sqrt(r47867);
double r47869 = r47860 + r47868;
double r47870 = 2.0;
double r47871 = r47870 * r47863;
double r47872 = r47869 / r47871;
return r47872;
}
double f(double a, double b, double c) {
double r47873 = 1.0;
double r47874 = cbrt(r47873);
double r47875 = r47874 * r47874;
double r47876 = r47873 / r47875;
double r47877 = 2.0;
double r47878 = a;
double r47879 = r47877 * r47878;
double r47880 = 4.0;
double r47881 = c;
double r47882 = r47878 * r47881;
double r47883 = r47880 * r47882;
double r47884 = r47879 / r47883;
double r47885 = r47876 / r47884;
double r47886 = r47885 / r47874;
double r47887 = b;
double r47888 = -r47887;
double r47889 = r47887 * r47887;
double r47890 = r47880 * r47878;
double r47891 = r47890 * r47881;
double r47892 = r47889 - r47891;
double r47893 = sqrt(r47892);
double r47894 = r47888 - r47893;
double r47895 = r47886 / r47894;
return r47895;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.9
rmApplied flip-+52.9
Simplified0.4
rmApplied *-un-lft-identity0.4
Applied *-un-lft-identity0.4
Applied times-frac0.4
Applied associate-/l*0.4
Simplified0.5
rmApplied add-cube-cbrt0.5
Applied add-sqr-sqrt0.5
Applied times-frac0.5
Applied times-frac0.5
Simplified0.5
Simplified0.5
rmApplied associate-*r/0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019346
(FPCore (a b c)
:name "Quadratic roots, wide range"
:precision binary64
:pre (and (< 4.9303800000000003e-32 a 2.02824e+31) (< 4.9303800000000003e-32 b 2.02824e+31) (< 4.9303800000000003e-32 c 2.02824e+31))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))