\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{\frac{c}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}}{3 \cdot a} \cdot \left(3 \cdot a\right)double f(double a, double b, double c) {
double r127060 = b;
double r127061 = -r127060;
double r127062 = r127060 * r127060;
double r127063 = 3.0;
double r127064 = a;
double r127065 = r127063 * r127064;
double r127066 = c;
double r127067 = r127065 * r127066;
double r127068 = r127062 - r127067;
double r127069 = sqrt(r127068);
double r127070 = r127061 + r127069;
double r127071 = r127070 / r127065;
return r127071;
}
double f(double a, double b, double c) {
double r127072 = c;
double r127073 = b;
double r127074 = -r127073;
double r127075 = r127073 * r127073;
double r127076 = 3.0;
double r127077 = a;
double r127078 = r127076 * r127077;
double r127079 = r127078 * r127072;
double r127080 = r127075 - r127079;
double r127081 = sqrt(r127080);
double r127082 = r127074 - r127081;
double r127083 = r127072 / r127082;
double r127084 = r127083 / r127078;
double r127085 = r127084 * r127078;
return r127085;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.7
rmApplied flip-+28.7
Simplified0.6
rmApplied frac-2neg0.6
Simplified0.4
rmApplied neg-mul-10.4
Applied *-un-lft-identity0.4
Applied distribute-rgt-neg-in0.4
Applied times-frac0.3
Applied times-frac0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2020034
(FPCore (a b c)
:name "Cubic critical, narrow range"
:precision binary64
:pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))