\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 -2.221067196710922123169723133116561516447 \cdot 10^{149}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(c \cdot \frac{a}{b}, 2, b \cdot -2\right)}{a}}{2}\\
\mathbf{elif}\;b \le 2.898348930695269343280527497904161468201 \cdot 10^{-35}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(b, b, \left(a \cdot 4\right) \cdot \left(-c\right)\right)} - b}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{-2 \cdot \frac{c}{b}}{2}\\
\end{array}double f(double a, double b, double c) {
double r4460484 = b;
double r4460485 = -r4460484;
double r4460486 = r4460484 * r4460484;
double r4460487 = 4.0;
double r4460488 = a;
double r4460489 = c;
double r4460490 = r4460488 * r4460489;
double r4460491 = r4460487 * r4460490;
double r4460492 = r4460486 - r4460491;
double r4460493 = sqrt(r4460492);
double r4460494 = r4460485 + r4460493;
double r4460495 = 2.0;
double r4460496 = r4460495 * r4460488;
double r4460497 = r4460494 / r4460496;
return r4460497;
}
double f(double a, double b, double c) {
double r4460498 = b;
double r4460499 = -2.221067196710922e+149;
bool r4460500 = r4460498 <= r4460499;
double r4460501 = c;
double r4460502 = a;
double r4460503 = r4460502 / r4460498;
double r4460504 = r4460501 * r4460503;
double r4460505 = 2.0;
double r4460506 = -2.0;
double r4460507 = r4460498 * r4460506;
double r4460508 = fma(r4460504, r4460505, r4460507);
double r4460509 = r4460508 / r4460502;
double r4460510 = r4460509 / r4460505;
double r4460511 = 2.8983489306952693e-35;
bool r4460512 = r4460498 <= r4460511;
double r4460513 = 4.0;
double r4460514 = r4460502 * r4460513;
double r4460515 = -r4460501;
double r4460516 = r4460514 * r4460515;
double r4460517 = fma(r4460498, r4460498, r4460516);
double r4460518 = sqrt(r4460517);
double r4460519 = r4460518 - r4460498;
double r4460520 = r4460519 / r4460502;
double r4460521 = r4460520 / r4460505;
double r4460522 = -2.0;
double r4460523 = r4460501 / r4460498;
double r4460524 = r4460522 * r4460523;
double r4460525 = r4460524 / r4460505;
double r4460526 = r4460512 ? r4460521 : r4460525;
double r4460527 = r4460500 ? r4460510 : r4460526;
return r4460527;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.4 |
|---|---|
| Target | 21.5 |
| Herbie | 10.6 |
if b < -2.221067196710922e+149Initial program 62.3
Simplified62.3
rmApplied fma-neg62.3
Taylor expanded around -inf 11.0
Simplified2.9
if -2.221067196710922e+149 < b < 2.8983489306952693e-35Initial program 14.6
Simplified14.6
rmApplied fma-neg14.6
if 2.8983489306952693e-35 < b Initial program 54.4
Simplified54.4
Taylor expanded around inf 7.3
Final simplification10.6
herbie shell --seed 2019171 +o rules:numerics
(FPCore (a b c)
:name "quadp (p42, positive)"
:herbie-target
(if (< b 0.0) (/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)) (/ c (* a (/ (- (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))))
(/ (+ (- b) (sqrt (- (* b b) (* 4.0 (* a c))))) (* 2.0 a)))