\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\frac{1}{2} \cdot \frac{\frac{c \cdot 4}{1}}{\left(-b\right) - \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}double f(double a, double b, double c) {
double r40148 = b;
double r40149 = -r40148;
double r40150 = r40148 * r40148;
double r40151 = 4.0;
double r40152 = a;
double r40153 = r40151 * r40152;
double r40154 = c;
double r40155 = r40153 * r40154;
double r40156 = r40150 - r40155;
double r40157 = sqrt(r40156);
double r40158 = r40149 + r40157;
double r40159 = 2.0;
double r40160 = r40159 * r40152;
double r40161 = r40158 / r40160;
return r40161;
}
double f(double a, double b, double c) {
double r40162 = 1.0;
double r40163 = 2.0;
double r40164 = r40162 / r40163;
double r40165 = c;
double r40166 = 4.0;
double r40167 = r40165 * r40166;
double r40168 = r40167 / r40162;
double r40169 = b;
double r40170 = -r40169;
double r40171 = r40169 * r40169;
double r40172 = a;
double r40173 = r40166 * r40172;
double r40174 = r40173 * r40165;
double r40175 = r40171 - r40174;
double r40176 = sqrt(r40175);
double r40177 = r40170 - r40176;
double r40178 = r40168 / r40177;
double r40179 = r40164 * r40178;
return r40179;
}



Bits error versus a



Bits error versus b



Bits error versus c
Results
Initial program 28.5
rmApplied flip-+28.5
Simplified0.5
rmApplied *-un-lft-identity0.5
Applied *-un-lft-identity0.5
Applied times-frac0.5
Applied times-frac0.5
Simplified0.5
Simplified0.5
rmApplied associate-/r*0.4
Simplified0.3
Final simplification0.3
herbie shell --seed 2020089 +o rules:numerics
(FPCore (a b c)
:name "Quadratic roots, 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) (* (* 4 a) c)))) (* 2 a)))