\frac{\left(-b\right) - \sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -7.668263498157483707441263748528829871939 \cdot 10^{-23}:\\
\;\;\;\;\frac{-1}{1 \cdot \left(\frac{b}{c} - \frac{a}{b}\right)}\\
\mathbf{elif}\;b \le 2.938039658404582626293093928685157937414 \cdot 10^{94}:\\
\;\;\;\;\frac{-1}{\frac{2}{b + \sqrt{\mathsf{fma}\left(c, \left(-a\right) \cdot 4, b \cdot b\right)}} \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\left(-1\right) \cdot \left(\frac{b}{a} - \frac{c}{b}\right)\\
\end{array}double f(double a, double b, double c) {
double r59248 = b;
double r59249 = -r59248;
double r59250 = r59248 * r59248;
double r59251 = 4.0;
double r59252 = a;
double r59253 = c;
double r59254 = r59252 * r59253;
double r59255 = r59251 * r59254;
double r59256 = r59250 - r59255;
double r59257 = sqrt(r59256);
double r59258 = r59249 - r59257;
double r59259 = 2.0;
double r59260 = r59259 * r59252;
double r59261 = r59258 / r59260;
return r59261;
}
double f(double a, double b, double c) {
double r59262 = b;
double r59263 = -7.668263498157484e-23;
bool r59264 = r59262 <= r59263;
double r59265 = -1.0;
double r59266 = 1.0;
double r59267 = c;
double r59268 = r59262 / r59267;
double r59269 = a;
double r59270 = r59269 / r59262;
double r59271 = r59268 - r59270;
double r59272 = r59266 * r59271;
double r59273 = r59265 / r59272;
double r59274 = 2.9380396584045826e+94;
bool r59275 = r59262 <= r59274;
double r59276 = 2.0;
double r59277 = -r59269;
double r59278 = 4.0;
double r59279 = r59277 * r59278;
double r59280 = r59262 * r59262;
double r59281 = fma(r59267, r59279, r59280);
double r59282 = sqrt(r59281);
double r59283 = r59262 + r59282;
double r59284 = r59276 / r59283;
double r59285 = r59284 * r59269;
double r59286 = r59265 / r59285;
double r59287 = -r59266;
double r59288 = r59262 / r59269;
double r59289 = r59267 / r59262;
double r59290 = r59288 - r59289;
double r59291 = r59287 * r59290;
double r59292 = r59275 ? r59286 : r59291;
double r59293 = r59264 ? r59273 : r59292;
return r59293;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.4 |
|---|---|
| Target | 21.0 |
| Herbie | 10.8 |
if b < -7.668263498157484e-23Initial program 55.0
Simplified55.0
rmApplied clear-num55.0
Simplified55.0
Taylor expanded around -inf 7.0
Simplified7.0
if -7.668263498157484e-23 < b < 2.9380396584045826e+94Initial program 15.6
Simplified15.6
rmApplied clear-num15.7
Simplified15.8
if 2.9380396584045826e+94 < b Initial program 46.7
Simplified46.7
Taylor expanded around inf 3.9
Simplified3.9
Final simplification10.8
herbie shell --seed 2019195 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))