\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{\left(3 \cdot a\right) \cdot c}{\left(-b\right) - \sqrt{b \cdot b - 3 \cdot \left(a \cdot c\right)}} \cdot \frac{1}{3 \cdot a}double f(double a, double b, double c) {
double r72306 = b;
double r72307 = -r72306;
double r72308 = r72306 * r72306;
double r72309 = 3.0;
double r72310 = a;
double r72311 = r72309 * r72310;
double r72312 = c;
double r72313 = r72311 * r72312;
double r72314 = r72308 - r72313;
double r72315 = sqrt(r72314);
double r72316 = r72307 + r72315;
double r72317 = r72316 / r72311;
return r72317;
}
double f(double a, double b, double c) {
double r72318 = 3.0;
double r72319 = a;
double r72320 = r72318 * r72319;
double r72321 = c;
double r72322 = r72320 * r72321;
double r72323 = b;
double r72324 = -r72323;
double r72325 = r72323 * r72323;
double r72326 = r72319 * r72321;
double r72327 = r72318 * r72326;
double r72328 = r72325 - r72327;
double r72329 = sqrt(r72328);
double r72330 = r72324 - r72329;
double r72331 = r72322 / r72330;
double r72332 = 1.0;
double r72333 = r72332 / r72320;
double r72334 = r72331 * r72333;
return r72334;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 44.1
rmApplied flip-+44.1
Simplified0.4
rmApplied pow10.4
Applied pow10.4
Applied pow10.4
Applied pow-prod-down0.4
Applied pow-prod-down0.4
Simplified0.4
rmApplied div-inv0.5
Final simplification0.5
herbie shell --seed 2019208
(FPCore (a b c)
:name "Cubic critical, medium range"
:precision binary64
:pre (and (< 1.11022e-16 a 9.0072e15) (< 1.11022e-16 b 9.0072e15) (< 1.11022e-16 c 9.0072e15))
(/ (+ (- b) (sqrt (- (* b b) (* (* 3 a) c)))) (* 3 a)))