\frac{\left(-b\right) + \sqrt{b \cdot b - \left(4 \cdot a\right) \cdot c}}{2 \cdot a}\begin{array}{l}
\mathbf{if}\;b \le -4.694684309811035 \cdot 10^{+121}:\\
\;\;\;\;\frac{\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 2}{2}\\
\mathbf{elif}\;b \le 4.6659701943749105 \cdot 10^{-84}:\\
\;\;\;\;\frac{\frac{1}{a} \cdot \left(\sqrt{\mathsf{fma}\left(c, a \cdot -4, b \cdot b\right)} - b\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\end{array}double f(double a, double b, double c) {
double r3265291 = b;
double r3265292 = -r3265291;
double r3265293 = r3265291 * r3265291;
double r3265294 = 4.0;
double r3265295 = a;
double r3265296 = r3265294 * r3265295;
double r3265297 = c;
double r3265298 = r3265296 * r3265297;
double r3265299 = r3265293 - r3265298;
double r3265300 = sqrt(r3265299);
double r3265301 = r3265292 + r3265300;
double r3265302 = 2.0;
double r3265303 = r3265302 * r3265295;
double r3265304 = r3265301 / r3265303;
return r3265304;
}
double f(double a, double b, double c) {
double r3265305 = b;
double r3265306 = -4.694684309811035e+121;
bool r3265307 = r3265305 <= r3265306;
double r3265308 = c;
double r3265309 = r3265308 / r3265305;
double r3265310 = a;
double r3265311 = r3265305 / r3265310;
double r3265312 = r3265309 - r3265311;
double r3265313 = 2.0;
double r3265314 = r3265312 * r3265313;
double r3265315 = r3265314 / r3265313;
double r3265316 = 4.6659701943749105e-84;
bool r3265317 = r3265305 <= r3265316;
double r3265318 = 1.0;
double r3265319 = r3265318 / r3265310;
double r3265320 = -4.0;
double r3265321 = r3265310 * r3265320;
double r3265322 = r3265305 * r3265305;
double r3265323 = fma(r3265308, r3265321, r3265322);
double r3265324 = sqrt(r3265323);
double r3265325 = r3265324 - r3265305;
double r3265326 = r3265319 * r3265325;
double r3265327 = r3265326 / r3265313;
double r3265328 = -2.0;
double r3265329 = r3265328 * r3265309;
double r3265330 = r3265329 / r3265313;
double r3265331 = r3265317 ? r3265327 : r3265330;
double r3265332 = r3265307 ? r3265315 : r3265331;
return r3265332;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.6 |
|---|---|
| Target | 20.4 |
| Herbie | 9.8 |
if b < -4.694684309811035e+121Initial program 49.8
Simplified49.8
Taylor expanded around -inf 2.6
Simplified2.6
if -4.694684309811035e+121 < b < 4.6659701943749105e-84Initial program 12.2
Simplified12.2
Taylor expanded around -inf 12.2
Simplified12.2
rmApplied div-inv12.3
if 4.6659701943749105e-84 < b Initial program 52.2
Simplified52.2
Taylor expanded around inf 9.3
Final simplification9.8
herbie shell --seed 2019144 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r1)"
:herbie-target
(if (< b 0) (/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* (* 4 a) c)))) (* 2 a)))