\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.49445624012960862396084940365110205816 \cdot 10^{-289}:\\
\;\;\;\;\frac{\frac{\sqrt{\mathsf{fma}\left(a \cdot \left(-c\right), 4, b \cdot b\right)} - b}{a}}{2}\\
\mathbf{elif}\;b \le 3.224491050532555179035846228386712352959 \cdot 10^{112}:\\
\;\;\;\;\frac{\left(\frac{c}{\sqrt[3]{\sqrt[3]{b + \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}} \cdot \left(\sqrt[3]{b + \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}} \cdot \sqrt[3]{b + \sqrt{\mathsf{fma}\left(4, a \cdot \left(-c\right), b \cdot b\right)}}\right)}} \cdot \frac{a \cdot 4}{a}\right) \cdot \frac{-1}{\sqrt[3]{\sqrt{\mathsf{fma}\left(a \cdot \left(-c\right), 4, b \cdot b\right)} + b} \cdot \sqrt[3]{b + \left(\sqrt[3]{\sqrt{\mathsf{fma}\left(c \cdot \left(-4\right), a, b \cdot b\right)}} \cdot \sqrt[3]{\sqrt{\mathsf{fma}\left(c \cdot \left(-4\right), a, b \cdot b\right)}}\right) \cdot \sqrt[3]{\sqrt{\mathsf{fma}\left(c \cdot \left(-4\right), a, b \cdot b\right)}}}}}{2}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{\frac{\mathsf{fma}\left(a \cdot 4, -c, 0\right)}{b \cdot 2}}{a}}{2}\\
\end{array}double f(double a, double b, double c) {
double r97930 = b;
double r97931 = -r97930;
double r97932 = r97930 * r97930;
double r97933 = 4.0;
double r97934 = a;
double r97935 = c;
double r97936 = r97934 * r97935;
double r97937 = r97933 * r97936;
double r97938 = r97932 - r97937;
double r97939 = sqrt(r97938);
double r97940 = r97931 + r97939;
double r97941 = 2.0;
double r97942 = r97941 * r97934;
double r97943 = r97940 / r97942;
return r97943;
}
double f(double a, double b, double c) {
double r97944 = b;
double r97945 = 2.4944562401296086e-289;
bool r97946 = r97944 <= r97945;
double r97947 = a;
double r97948 = c;
double r97949 = -r97948;
double r97950 = r97947 * r97949;
double r97951 = 4.0;
double r97952 = r97944 * r97944;
double r97953 = fma(r97950, r97951, r97952);
double r97954 = sqrt(r97953);
double r97955 = r97954 - r97944;
double r97956 = r97955 / r97947;
double r97957 = 2.0;
double r97958 = r97956 / r97957;
double r97959 = 3.224491050532555e+112;
bool r97960 = r97944 <= r97959;
double r97961 = fma(r97951, r97950, r97952);
double r97962 = sqrt(r97961);
double r97963 = r97944 + r97962;
double r97964 = cbrt(r97963);
double r97965 = r97964 * r97964;
double r97966 = r97964 * r97965;
double r97967 = cbrt(r97966);
double r97968 = r97948 / r97967;
double r97969 = r97947 * r97951;
double r97970 = r97969 / r97947;
double r97971 = r97968 * r97970;
double r97972 = -1.0;
double r97973 = r97954 + r97944;
double r97974 = cbrt(r97973);
double r97975 = -r97951;
double r97976 = r97948 * r97975;
double r97977 = fma(r97976, r97947, r97952);
double r97978 = sqrt(r97977);
double r97979 = cbrt(r97978);
double r97980 = r97979 * r97979;
double r97981 = r97980 * r97979;
double r97982 = r97944 + r97981;
double r97983 = cbrt(r97982);
double r97984 = r97974 * r97983;
double r97985 = r97972 / r97984;
double r97986 = r97971 * r97985;
double r97987 = r97986 / r97957;
double r97988 = 0.0;
double r97989 = fma(r97969, r97949, r97988);
double r97990 = 2.0;
double r97991 = r97944 * r97990;
double r97992 = r97989 / r97991;
double r97993 = r97992 / r97947;
double r97994 = r97993 / r97957;
double r97995 = r97960 ? r97987 : r97994;
double r97996 = r97946 ? r97958 : r97995;
return r97996;
}




Bits error versus a




Bits error versus b




Bits error versus c
| Original | 34.6 |
|---|---|
| Target | 21.0 |
| Herbie | 16.3 |
if b < 2.4944562401296086e-289Initial program 22.5
Simplified22.5
rmApplied *-un-lft-identity22.5
Applied *-un-lft-identity22.5
Applied times-frac22.5
Simplified22.5
Simplified22.5
if 2.4944562401296086e-289 < b < 3.224491050532555e+112Initial program 33.8
Simplified33.8
rmApplied flip--33.8
Simplified15.8
Simplified15.8
rmApplied *-un-lft-identity15.8
Applied add-cube-cbrt16.5
Applied *-un-lft-identity16.5
Applied times-frac16.5
Applied times-frac15.8
Simplified15.8
Simplified9.1
rmApplied add-cube-cbrt9.1
Simplified9.1
Simplified9.1
rmApplied add-cube-cbrt9.1
Simplified9.2
Simplified9.2
if 3.224491050532555e+112 < b Initial program 60.8
Simplified60.8
rmApplied flip--60.8
Simplified32.6
Simplified32.6
Taylor expanded around 0 13.2
Final simplification16.3
herbie shell --seed 2019194 +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)))