\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 -1.488368069126177 \cdot 10^{-277}:\\
\;\;\;\;\frac{\frac{\mathsf{fma}\left(\sqrt{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}, \sqrt{\sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}, -b\right)}{a}}{2}\\
\mathbf{elif}\;b \le 1.1941771483955193 \cdot 10^{+94}:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(-4, a \cdot c, 0\right)}{b + \sqrt{\mathsf{fma}\left(a \cdot c, -4, b \cdot b\right)}}}{a}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(-4, a \cdot c, 0\right)}{b \cdot 2}}{a}}{2}\\
\end{array}double f(double a, double b, double c) {
double r2352735 = b;
double r2352736 = -r2352735;
double r2352737 = r2352735 * r2352735;
double r2352738 = 4.0;
double r2352739 = a;
double r2352740 = c;
double r2352741 = r2352739 * r2352740;
double r2352742 = r2352738 * r2352741;
double r2352743 = r2352737 - r2352742;
double r2352744 = sqrt(r2352743);
double r2352745 = r2352736 + r2352744;
double r2352746 = 2.0;
double r2352747 = r2352746 * r2352739;
double r2352748 = r2352745 / r2352747;
return r2352748;
}
double f(double a, double b, double c) {
double r2352749 = b;
double r2352750 = -1.488368069126177e-277;
bool r2352751 = r2352749 <= r2352750;
double r2352752 = a;
double r2352753 = c;
double r2352754 = r2352752 * r2352753;
double r2352755 = -4.0;
double r2352756 = r2352749 * r2352749;
double r2352757 = fma(r2352754, r2352755, r2352756);
double r2352758 = sqrt(r2352757);
double r2352759 = sqrt(r2352758);
double r2352760 = -r2352749;
double r2352761 = fma(r2352759, r2352759, r2352760);
double r2352762 = r2352761 / r2352752;
double r2352763 = 2.0;
double r2352764 = r2352762 / r2352763;
double r2352765 = 1.1941771483955193e+94;
bool r2352766 = r2352749 <= r2352765;
double r2352767 = 0.0;
double r2352768 = fma(r2352755, r2352754, r2352767);
double r2352769 = r2352749 + r2352758;
double r2352770 = r2352768 / r2352769;
double r2352771 = r2352770 / r2352752;
double r2352772 = r2352771 / r2352763;
double r2352773 = r2352749 * r2352763;
double r2352774 = r2352768 / r2352773;
double r2352775 = r2352774 / r2352752;
double r2352776 = r2352775 / r2352763;
double r2352777 = r2352766 ? r2352772 : r2352776;
double r2352778 = r2352751 ? r2352764 : r2352777;
return r2352778;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 33.2 |
|---|---|
| Target | 20.4 |
| Herbie | 18.2 |
if b < -1.488368069126177e-277Initial program 20.8
Simplified20.7
rmApplied add-sqr-sqrt20.7
Applied sqrt-prod20.9
Applied fma-neg20.8
if -1.488368069126177e-277 < b < 1.1941771483955193e+94Initial program 31.7
Simplified31.7
rmApplied flip--31.8
Simplified16.5
if 1.1941771483955193e+94 < b Initial program 58.0
Simplified58.0
rmApplied flip--58.0
Simplified31.9
Taylor expanded around 0 15.4
Final simplification18.2
herbie shell --seed 2019149 +o rules:numerics
(FPCore (a b c)
:name "quadp (p42, positive)"
: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)))