\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{-2 \cdot c}{b + \sqrt{\mathsf{fma}\left(\left(a \cdot c\right), -4, \left(b \cdot b\right)\right)}}double f(double a, double b, double c) {
double r3440647 = b;
double r3440648 = -r3440647;
double r3440649 = r3440647 * r3440647;
double r3440650 = 4.0;
double r3440651 = a;
double r3440652 = r3440650 * r3440651;
double r3440653 = c;
double r3440654 = r3440652 * r3440653;
double r3440655 = r3440649 - r3440654;
double r3440656 = sqrt(r3440655);
double r3440657 = r3440648 + r3440656;
double r3440658 = 2.0;
double r3440659 = r3440658 * r3440651;
double r3440660 = r3440657 / r3440659;
return r3440660;
}
double f(double a, double b, double c) {
double r3440661 = -2.0;
double r3440662 = c;
double r3440663 = r3440661 * r3440662;
double r3440664 = b;
double r3440665 = a;
double r3440666 = r3440665 * r3440662;
double r3440667 = -4.0;
double r3440668 = r3440664 * r3440664;
double r3440669 = fma(r3440666, r3440667, r3440668);
double r3440670 = sqrt(r3440669);
double r3440671 = r3440664 + r3440670;
double r3440672 = r3440663 / r3440671;
return r3440672;
}



Bits error versus a



Bits error versus b



Bits error versus c
Initial program 28.8
Simplified28.8
rmApplied *-un-lft-identity28.8
Applied div-inv28.8
Applied times-frac28.8
Simplified28.7
Simplified28.7
rmApplied flip--28.9
Applied associate-*l/28.9
Simplified0.4
Taylor expanded around 0 0.3
Taylor expanded around 0 0.3
Simplified0.3
Final simplification0.3
herbie shell --seed 2019124 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, narrow range"
:pre (and (< 1.0536712127723509e-08 a 94906265.62425156) (< 1.0536712127723509e-08 b 94906265.62425156) (< 1.0536712127723509e-08 c 94906265.62425156))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))