\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 -9.332433396832084322962138528577137922234 \cdot 10^{-58}:\\
\;\;\;\;-1 \cdot \frac{c}{b}\\
\mathbf{elif}\;b \le 3.038903409991338138548211857189252856935 \cdot 10^{107}:\\
\;\;\;\;\left(-\frac{b}{2 \cdot a}\right) - \frac{\sqrt{b \cdot b - 4 \cdot \left(a \cdot c\right)}}{2 \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\left(\frac{c}{b} - \frac{b}{a}\right) \cdot 1\\
\end{array}double f(double a, double b, double c) {
double r3680701 = b;
double r3680702 = -r3680701;
double r3680703 = r3680701 * r3680701;
double r3680704 = 4.0;
double r3680705 = a;
double r3680706 = c;
double r3680707 = r3680705 * r3680706;
double r3680708 = r3680704 * r3680707;
double r3680709 = r3680703 - r3680708;
double r3680710 = sqrt(r3680709);
double r3680711 = r3680702 - r3680710;
double r3680712 = 2.0;
double r3680713 = r3680712 * r3680705;
double r3680714 = r3680711 / r3680713;
return r3680714;
}
double f(double a, double b, double c) {
double r3680715 = b;
double r3680716 = -9.332433396832084e-58;
bool r3680717 = r3680715 <= r3680716;
double r3680718 = -1.0;
double r3680719 = c;
double r3680720 = r3680719 / r3680715;
double r3680721 = r3680718 * r3680720;
double r3680722 = 3.038903409991338e+107;
bool r3680723 = r3680715 <= r3680722;
double r3680724 = 2.0;
double r3680725 = a;
double r3680726 = r3680724 * r3680725;
double r3680727 = r3680715 / r3680726;
double r3680728 = -r3680727;
double r3680729 = r3680715 * r3680715;
double r3680730 = 4.0;
double r3680731 = r3680725 * r3680719;
double r3680732 = r3680730 * r3680731;
double r3680733 = r3680729 - r3680732;
double r3680734 = sqrt(r3680733);
double r3680735 = r3680734 / r3680726;
double r3680736 = r3680728 - r3680735;
double r3680737 = r3680715 / r3680725;
double r3680738 = r3680720 - r3680737;
double r3680739 = 1.0;
double r3680740 = r3680738 * r3680739;
double r3680741 = r3680723 ? r3680736 : r3680740;
double r3680742 = r3680717 ? r3680721 : r3680741;
return r3680742;
}




Bits error versus a




Bits error versus b




Bits error versus c
Results
| Original | 34.1 |
|---|---|
| Target | 21.4 |
| Herbie | 10.5 |
if b < -9.332433396832084e-58Initial program 53.5
Taylor expanded around -inf 8.7
if -9.332433396832084e-58 < b < 3.038903409991338e+107Initial program 14.1
rmApplied div-sub14.1
if 3.038903409991338e+107 < b Initial program 49.2
Taylor expanded around inf 3.5
Simplified3.5
Final simplification10.5
herbie shell --seed 2019171 +o rules:numerics
(FPCore (a b c)
:name "quadm (p42, negative)"
: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)))