\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(3 \cdot a\right) \cdot \left(-b\right) + \left(3 \cdot a\right) \cdot \left(-\sqrt{b \cdot b - \left(3 \cdot a\right) \cdot c}\right)}double f(double a, double b, double c) {
double r125446 = b;
double r125447 = -r125446;
double r125448 = r125446 * r125446;
double r125449 = 3.0;
double r125450 = a;
double r125451 = r125449 * r125450;
double r125452 = c;
double r125453 = r125451 * r125452;
double r125454 = r125448 - r125453;
double r125455 = sqrt(r125454);
double r125456 = r125447 + r125455;
double r125457 = r125456 / r125451;
return r125457;
}
double f(double a, double b, double c) {
double r125458 = b;
double r125459 = 2.0;
double r125460 = pow(r125458, r125459);
double r125461 = r125460 - r125460;
double r125462 = 3.0;
double r125463 = a;
double r125464 = r125462 * r125463;
double r125465 = c;
double r125466 = r125464 * r125465;
double r125467 = r125461 + r125466;
double r125468 = -r125458;
double r125469 = r125464 * r125468;
double r125470 = r125458 * r125458;
double r125471 = r125470 - r125466;
double r125472 = sqrt(r125471);
double r125473 = -r125472;
double r125474 = r125464 * r125473;
double r125475 = r125469 + r125474;
double r125476 = r125467 / r125475;
return r125476;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.7
rmApplied flip-+28.7
Simplified0.6
rmApplied associate-*r*0.5
rmApplied div-inv0.5
Applied associate-/l*0.5
Simplified0.5
rmApplied sub-neg0.5
Applied distribute-lft-in0.4
Final simplification0.4
herbie shell --seed 2020003
(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)))