\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{3 \cdot \left(a \cdot c\right)}{3} \cdot \frac{\frac{1}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}{a}double f(double a, double b, double c) {
double r161793 = b;
double r161794 = -r161793;
double r161795 = r161793 * r161793;
double r161796 = 3.0;
double r161797 = a;
double r161798 = r161796 * r161797;
double r161799 = c;
double r161800 = r161798 * r161799;
double r161801 = r161795 - r161800;
double r161802 = sqrt(r161801);
double r161803 = r161794 + r161802;
double r161804 = r161803 / r161798;
return r161804;
}
double f(double a, double b, double c) {
double r161805 = 3.0;
double r161806 = a;
double r161807 = c;
double r161808 = r161806 * r161807;
double r161809 = r161805 * r161808;
double r161810 = r161809 / r161805;
double r161811 = 1.0;
double r161812 = b;
double r161813 = -r161812;
double r161814 = r161812 * r161812;
double r161815 = r161805 * r161806;
double r161816 = r161815 * r161807;
double r161817 = r161814 - r161816;
double r161818 = sqrt(r161817);
double r161819 = r161813 - r161818;
double r161820 = r161811 / r161819;
double r161821 = r161820 / r161806;
double r161822 = r161810 * r161821;
return r161822;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.6
rmApplied flip-+52.6
Simplified0.5
rmApplied div-inv0.6
Applied times-frac0.5
Simplified0.5
Final simplification0.5
herbie shell --seed 2020027
(FPCore (a b c)
:name "Cubic critical, 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) (* (* 3 a) c)))) (* 3 a)))