\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.900769547116861223219498082835437225018 \cdot 10^{46}:\\
\;\;\;\;\frac{\mathsf{fma}\left(-2, \frac{b}{a}, 2 \cdot \frac{c}{b}\right)}{2}\\
\mathbf{elif}\;b \le 1.652881074072101299780548052808700933774 \cdot 10^{-142}:\\
\;\;\;\;\frac{\frac{1}{a} \cdot \left(\sqrt{b \cdot b - c \cdot \left(a \cdot 4\right)} - b\right)}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{c}{b} \cdot -2}{2}\\
\end{array}double f(double a, double b, double c) {
double r3361860 = b;
double r3361861 = -r3361860;
double r3361862 = r3361860 * r3361860;
double r3361863 = 4.0;
double r3361864 = a;
double r3361865 = c;
double r3361866 = r3361864 * r3361865;
double r3361867 = r3361863 * r3361866;
double r3361868 = r3361862 - r3361867;
double r3361869 = sqrt(r3361868);
double r3361870 = r3361861 + r3361869;
double r3361871 = 2.0;
double r3361872 = r3361871 * r3361864;
double r3361873 = r3361870 / r3361872;
return r3361873;
}
double f(double a, double b, double c) {
double r3361874 = b;
double r3361875 = -2.900769547116861e+46;
bool r3361876 = r3361874 <= r3361875;
double r3361877 = -2.0;
double r3361878 = a;
double r3361879 = r3361874 / r3361878;
double r3361880 = 2.0;
double r3361881 = c;
double r3361882 = r3361881 / r3361874;
double r3361883 = r3361880 * r3361882;
double r3361884 = fma(r3361877, r3361879, r3361883);
double r3361885 = r3361884 / r3361880;
double r3361886 = 1.6528810740721013e-142;
bool r3361887 = r3361874 <= r3361886;
double r3361888 = 1.0;
double r3361889 = r3361888 / r3361878;
double r3361890 = r3361874 * r3361874;
double r3361891 = 4.0;
double r3361892 = r3361878 * r3361891;
double r3361893 = r3361881 * r3361892;
double r3361894 = r3361890 - r3361893;
double r3361895 = sqrt(r3361894);
double r3361896 = r3361895 - r3361874;
double r3361897 = r3361889 * r3361896;
double r3361898 = r3361897 / r3361880;
double r3361899 = -2.0;
double r3361900 = r3361882 * r3361899;
double r3361901 = r3361900 / r3361880;
double r3361902 = r3361887 ? r3361898 : r3361901;
double r3361903 = r3361876 ? r3361885 : r3361902;
return r3361903;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.7 |
|---|---|
| Target | 21.1 |
| Herbie | 10.7 |
if b < -2.900769547116861e+46Initial program 37.7
Simplified37.7
Taylor expanded around -inf 5.3
Simplified5.3
if -2.900769547116861e+46 < b < 1.6528810740721013e-142Initial program 11.8
Simplified11.7
rmApplied div-inv11.9
if 1.6528810740721013e-142 < b Initial program 50.7
Simplified50.7
Taylor expanded around inf 12.1
Final simplification10.7
herbie shell --seed 2019168 +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)))