\left(0.5 \cdot \cos re\right) \cdot \left(e^{0 - im} - e^{im}\right)\begin{array}{l}
\mathbf{if}\;im \le 1.568700811656534 \cdot 10^{-11}:\\
\;\;\;\;\left(-2 \cdot im + \left(im \cdot \left(im \cdot im\right)\right) \cdot \frac{-1}{3}\right) \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;\left(\sqrt[3]{\frac{\cos re}{e^{im}} \cdot \left(\frac{\cos re}{e^{im}} \cdot \frac{\cos re}{e^{im}}\right)} - e^{im} \cdot \cos re\right) \cdot 0.5\\
\end{array}double f(double re, double im) {
double r6962925 = 0.5;
double r6962926 = re;
double r6962927 = cos(r6962926);
double r6962928 = r6962925 * r6962927;
double r6962929 = 0.0;
double r6962930 = im;
double r6962931 = r6962929 - r6962930;
double r6962932 = exp(r6962931);
double r6962933 = exp(r6962930);
double r6962934 = r6962932 - r6962933;
double r6962935 = r6962928 * r6962934;
return r6962935;
}
double f(double re, double im) {
double r6962936 = im;
double r6962937 = 1.568700811656534e-11;
bool r6962938 = r6962936 <= r6962937;
double r6962939 = -2.0;
double r6962940 = r6962939 * r6962936;
double r6962941 = r6962936 * r6962936;
double r6962942 = r6962936 * r6962941;
double r6962943 = -0.3333333333333333;
double r6962944 = r6962942 * r6962943;
double r6962945 = r6962940 + r6962944;
double r6962946 = 0.5;
double r6962947 = r6962945 * r6962946;
double r6962948 = re;
double r6962949 = cos(r6962948);
double r6962950 = exp(r6962936);
double r6962951 = r6962949 / r6962950;
double r6962952 = r6962951 * r6962951;
double r6962953 = r6962951 * r6962952;
double r6962954 = cbrt(r6962953);
double r6962955 = r6962950 * r6962949;
double r6962956 = r6962954 - r6962955;
double r6962957 = r6962956 * r6962946;
double r6962958 = r6962938 ? r6962947 : r6962957;
return r6962958;
}




Bits error versus re




Bits error versus im
Results
| Original | 58.0 |
|---|---|
| Target | 0.3 |
| Herbie | 28.3 |
if im < 1.568700811656534e-11Initial program 59.0
Simplified59.1
Taylor expanded around 0 31.7
Simplified31.7
Taylor expanded around 0 28.7
if 1.568700811656534e-11 < im Initial program 12.3
Simplified13.0
rmApplied add-cbrt-cube13.1
Applied add-cbrt-cube13.4
Applied cbrt-undiv13.0
Simplified13.1
Final simplification28.3
herbie shell --seed 2019141
(FPCore (re im)
:name "math.sin on complex, imaginary part"
:herbie-target
(if (< (fabs im) 1) (- (* (cos re) (+ (+ im (* (* (* 1/6 im) im) im)) (* (* (* (* (* 1/120 im) im) im) im) im)))) (* (* 0.5 (cos re)) (- (exp (- 0 im)) (exp im))))
(* (* 0.5 (cos re)) (- (exp (- 0 im)) (exp im))))