\left(0.5 \cdot \cos re\right) \cdot \left(e^{0 - im} - e^{im}\right)\begin{array}{l}
\mathbf{if}\;\cos re \le 0.40760495938011426:\\
\;\;\;\;\left(\sqrt[3]{\frac{\cos re}{e^{im}} - e^{im} \cdot \cos re} \cdot \left(\sqrt[3]{\frac{\cos re}{e^{im}} - e^{im} \cdot \cos re} \cdot \sqrt[3]{\frac{\cos re}{e^{im}} - e^{im} \cdot \cos re}\right)\right) \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(\log \left({\left(e^{im}\right)}^{\left(re \cdot re - \frac{1}{3} \cdot \left(im \cdot im\right)\right)}\right) - \left(im + im\right)\right)\\
\end{array}double f(double re, double im) {
double r3678946 = 0.5;
double r3678947 = re;
double r3678948 = cos(r3678947);
double r3678949 = r3678946 * r3678948;
double r3678950 = 0.0;
double r3678951 = im;
double r3678952 = r3678950 - r3678951;
double r3678953 = exp(r3678952);
double r3678954 = exp(r3678951);
double r3678955 = r3678953 - r3678954;
double r3678956 = r3678949 * r3678955;
return r3678956;
}
double f(double re, double im) {
double r3678957 = re;
double r3678958 = cos(r3678957);
double r3678959 = 0.40760495938011426;
bool r3678960 = r3678958 <= r3678959;
double r3678961 = im;
double r3678962 = exp(r3678961);
double r3678963 = r3678958 / r3678962;
double r3678964 = r3678962 * r3678958;
double r3678965 = r3678963 - r3678964;
double r3678966 = cbrt(r3678965);
double r3678967 = r3678966 * r3678966;
double r3678968 = r3678966 * r3678967;
double r3678969 = 0.5;
double r3678970 = r3678968 * r3678969;
double r3678971 = r3678957 * r3678957;
double r3678972 = 0.3333333333333333;
double r3678973 = r3678961 * r3678961;
double r3678974 = r3678972 * r3678973;
double r3678975 = r3678971 - r3678974;
double r3678976 = pow(r3678962, r3678975);
double r3678977 = log(r3678976);
double r3678978 = r3678961 + r3678961;
double r3678979 = r3678977 - r3678978;
double r3678980 = r3678969 * r3678979;
double r3678981 = r3678960 ? r3678970 : r3678980;
return r3678981;
}




Bits error versus re




Bits error versus im
Results
| Original | 58.1 |
|---|---|
| Target | 0.2 |
| Herbie | 28.6 |
if (cos re) < 0.40760495938011426Initial program 58.3
Simplified58.4
rmApplied add-cube-cbrt58.4
if 0.40760495938011426 < (cos re) Initial program 58.0
Simplified58.0
Taylor expanded around 0 17.9
Simplified17.9
rmApplied add-log-exp17.5
rmApplied add-log-exp16.5
Applied exp-to-pow14.7
Final simplification28.6
herbie shell --seed 2019153
(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))))