\frac{\left(-b\right) + \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}}{3 \cdot a}\frac{\left({b}^{2} - {b}^{2}\right) + \left(3 \cdot a\right) \cdot c}{\left(-b\right) - \sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}} \cdot \frac{1}{3 \cdot a}double f(double a, double b, double c) {
double r89344 = b;
double r89345 = -r89344;
double r89346 = r89344 * r89344;
double r89347 = 3.0;
double r89348 = a;
double r89349 = r89347 * r89348;
double r89350 = c;
double r89351 = r89349 * r89350;
double r89352 = r89346 - r89351;
double r89353 = sqrt(r89352);
double r89354 = r89345 + r89353;
double r89355 = r89354 / r89349;
return r89355;
}
double f(double a, double b, double c) {
double r89356 = b;
double r89357 = 2.0;
double r89358 = pow(r89356, r89357);
double r89359 = r89358 - r89358;
double r89360 = 3.0;
double r89361 = a;
double r89362 = r89360 * r89361;
double r89363 = c;
double r89364 = r89362 * r89363;
double r89365 = r89359 + r89364;
double r89366 = -r89356;
double r89367 = r89356 * r89356;
double r89368 = r89367 - r89364;
double r89369 = sqrt(r89368);
double r89370 = r89366 - r89369;
double r89371 = r89365 / r89370;
double r89372 = 1.0;
double r89373 = r89372 / r89362;
double r89374 = r89371 * r89373;
return r89374;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 52.6
rmApplied flip-+52.6
Simplified0.5
rmApplied associate-*r*0.4
rmApplied div-inv0.4
Final simplification0.4
herbie shell --seed 2020047
(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)))