\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 -9.088000531423294 \cdot 10^{+152}:\\
\;\;\;\;\frac{c}{b} - \frac{b}{a}\\
\mathbf{elif}\;b \le 9.354082991670835 \cdot 10^{-125}:\\
\;\;\;\;\frac{\left(\sqrt{\mathsf{fma}\left(a \cdot -4, c, b \cdot b\right)} - b\right) \cdot \frac{1}{2}}{a}\\
\mathbf{else}:\\
\;\;\;\;\frac{-c}{b}\\
\end{array}double f(double a, double b, double c) {
double r1241704 = b;
double r1241705 = -r1241704;
double r1241706 = r1241704 * r1241704;
double r1241707 = 4.0;
double r1241708 = a;
double r1241709 = r1241707 * r1241708;
double r1241710 = c;
double r1241711 = r1241709 * r1241710;
double r1241712 = r1241706 - r1241711;
double r1241713 = sqrt(r1241712);
double r1241714 = r1241705 + r1241713;
double r1241715 = 2.0;
double r1241716 = r1241715 * r1241708;
double r1241717 = r1241714 / r1241716;
return r1241717;
}
double f(double a, double b, double c) {
double r1241718 = b;
double r1241719 = -9.088000531423294e+152;
bool r1241720 = r1241718 <= r1241719;
double r1241721 = c;
double r1241722 = r1241721 / r1241718;
double r1241723 = a;
double r1241724 = r1241718 / r1241723;
double r1241725 = r1241722 - r1241724;
double r1241726 = 9.354082991670835e-125;
bool r1241727 = r1241718 <= r1241726;
double r1241728 = -4.0;
double r1241729 = r1241723 * r1241728;
double r1241730 = r1241718 * r1241718;
double r1241731 = fma(r1241729, r1241721, r1241730);
double r1241732 = sqrt(r1241731);
double r1241733 = r1241732 - r1241718;
double r1241734 = 0.5;
double r1241735 = r1241733 * r1241734;
double r1241736 = r1241735 / r1241723;
double r1241737 = -r1241721;
double r1241738 = r1241737 / r1241718;
double r1241739 = r1241727 ? r1241736 : r1241738;
double r1241740 = r1241720 ? r1241725 : r1241739;
return r1241740;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 32.9 |
|---|---|
| Target | 20.3 |
| Herbie | 10.3 |
if b < -9.088000531423294e+152Initial program 60.4
Simplified60.4
Taylor expanded around -inf 1.5
if -9.088000531423294e+152 < b < 9.354082991670835e-125Initial program 10.9
Simplified10.9
rmApplied *-un-lft-identity10.9
Applied div-inv11.1
Applied times-frac11.1
Simplified11.1
Simplified11.1
rmApplied associate-*r/10.9
if 9.354082991670835e-125 < b Initial program 49.8
Simplified49.8
Taylor expanded around inf 11.9
Simplified11.9
Final simplification10.3
herbie shell --seed 2019153 +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)))