\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 -4.1515494582665793 \cdot 10^{-119}:\\
\;\;\;\;1 \cdot \left(-1 \cdot \frac{c}{b}\right)\\
\mathbf{elif}\;b \le 4.2504918589151378 \cdot 10^{117}:\\
\;\;\;\;1 \cdot \frac{\left(-b\right) - \sqrt{\mathsf{fma}\left(b, b, -4 \cdot \left(a \cdot c\right)\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;1 \cdot \left(\frac{c}{b} - \frac{b}{a}\right)\\
\end{array}double f(double a, double b, double c) {
double r86382 = b;
double r86383 = -r86382;
double r86384 = r86382 * r86382;
double r86385 = 4.0;
double r86386 = a;
double r86387 = c;
double r86388 = r86386 * r86387;
double r86389 = r86385 * r86388;
double r86390 = r86384 - r86389;
double r86391 = sqrt(r86390);
double r86392 = r86383 - r86391;
double r86393 = 2.0;
double r86394 = r86393 * r86386;
double r86395 = r86392 / r86394;
return r86395;
}
double f(double a, double b, double c) {
double r86396 = b;
double r86397 = -4.1515494582665793e-119;
bool r86398 = r86396 <= r86397;
double r86399 = 1.0;
double r86400 = -1.0;
double r86401 = c;
double r86402 = r86401 / r86396;
double r86403 = r86400 * r86402;
double r86404 = r86399 * r86403;
double r86405 = 4.250491858915138e+117;
bool r86406 = r86396 <= r86405;
double r86407 = -r86396;
double r86408 = 4.0;
double r86409 = a;
double r86410 = r86409 * r86401;
double r86411 = r86408 * r86410;
double r86412 = -r86411;
double r86413 = fma(r86396, r86396, r86412);
double r86414 = sqrt(r86413);
double r86415 = r86407 - r86414;
double r86416 = 2.0;
double r86417 = r86416 * r86409;
double r86418 = r86415 / r86417;
double r86419 = r86399 * r86418;
double r86420 = 1.0;
double r86421 = r86396 / r86409;
double r86422 = r86402 - r86421;
double r86423 = r86420 * r86422;
double r86424 = r86406 ? r86419 : r86423;
double r86425 = r86398 ? r86404 : r86424;
return r86425;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.4 |
|---|---|
| Target | 21.3 |
| Herbie | 10.4 |
if b < -4.1515494582665793e-119Initial program 51.5
rmApplied div-inv51.5
rmApplied *-un-lft-identity51.5
Applied associate-*l*51.5
Simplified51.5
Taylor expanded around -inf 11.4
if -4.1515494582665793e-119 < b < 4.250491858915138e+117Initial program 11.8
rmApplied div-inv11.9
rmApplied *-un-lft-identity11.9
Applied associate-*l*11.9
Simplified11.8
rmApplied fma-neg11.8
if 4.250491858915138e+117 < b Initial program 52.2
Taylor expanded around inf 2.9
Simplified2.9
Final simplification10.4
herbie shell --seed 2020081 +o rules:numerics
(FPCore (a b c)
:name "The quadratic formula (r2)"
:precision binary64
:herbie-target
(if (< b 0.0) (/ c (* a (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))) (/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))
(/ (- (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)))