\left(0.5 \cdot \cos re\right) \cdot \left(e^{0 - im} - e^{im}\right)\begin{array}{l}
\mathbf{if}\;\cos re \le -0.024407493522205715:\\
\;\;\;\;\left(\cos re \cdot 0.5\right) \cdot \left(e^{-im} - e^{im}\right)\\
\mathbf{elif}\;\cos re \le 0.9991588276041066:\\
\;\;\;\;\left(\left(\sqrt[3]{\sqrt[3]{\left(\left(im \cdot im\right) \cdot im\right) \cdot \frac{-1}{3} + -2 \cdot im} \cdot \sqrt[3]{\left(\left(im \cdot im\right) \cdot im\right) \cdot \frac{-1}{3} + -2 \cdot im}} \cdot \left(\sqrt[3]{\sqrt[3]{\left(\left(im \cdot im\right) \cdot im\right) \cdot \frac{-1}{3} + -2 \cdot im} \cdot \sqrt[3]{\left(\left(im \cdot im\right) \cdot im\right) \cdot \frac{-1}{3} + -2 \cdot im}} \cdot \sqrt[3]{\sqrt[3]{\left(\left(im \cdot im\right) \cdot im\right) \cdot \frac{-1}{3} + -2 \cdot im} \cdot \sqrt[3]{\left(\left(im \cdot im\right) \cdot im\right) \cdot \frac{-1}{3} + -2 \cdot im}}\right)\right) \cdot \sqrt[3]{\left(\left(im \cdot im\right) \cdot im\right) \cdot \frac{-1}{3} + -2 \cdot im}\right) \cdot 0.5\\
\mathbf{else}:\\
\;\;\;\;0.5 \cdot \left(im \cdot \left(re \cdot re\right) + \left(-2 + \left(im \cdot im\right) \cdot \frac{-1}{3}\right) \cdot im\right)\\
\end{array}double f(double re, double im) {
double r7393027 = 0.5;
double r7393028 = re;
double r7393029 = cos(r7393028);
double r7393030 = r7393027 * r7393029;
double r7393031 = 0.0;
double r7393032 = im;
double r7393033 = r7393031 - r7393032;
double r7393034 = exp(r7393033);
double r7393035 = exp(r7393032);
double r7393036 = r7393034 - r7393035;
double r7393037 = r7393030 * r7393036;
return r7393037;
}
double f(double re, double im) {
double r7393038 = re;
double r7393039 = cos(r7393038);
double r7393040 = -0.024407493522205715;
bool r7393041 = r7393039 <= r7393040;
double r7393042 = 0.5;
double r7393043 = r7393039 * r7393042;
double r7393044 = im;
double r7393045 = -r7393044;
double r7393046 = exp(r7393045);
double r7393047 = exp(r7393044);
double r7393048 = r7393046 - r7393047;
double r7393049 = r7393043 * r7393048;
double r7393050 = 0.9991588276041066;
bool r7393051 = r7393039 <= r7393050;
double r7393052 = r7393044 * r7393044;
double r7393053 = r7393052 * r7393044;
double r7393054 = -0.3333333333333333;
double r7393055 = r7393053 * r7393054;
double r7393056 = -2.0;
double r7393057 = r7393056 * r7393044;
double r7393058 = r7393055 + r7393057;
double r7393059 = cbrt(r7393058);
double r7393060 = r7393059 * r7393059;
double r7393061 = cbrt(r7393060);
double r7393062 = r7393061 * r7393061;
double r7393063 = r7393061 * r7393062;
double r7393064 = r7393063 * r7393059;
double r7393065 = r7393064 * r7393042;
double r7393066 = r7393038 * r7393038;
double r7393067 = r7393044 * r7393066;
double r7393068 = r7393052 * r7393054;
double r7393069 = r7393056 + r7393068;
double r7393070 = r7393069 * r7393044;
double r7393071 = r7393067 + r7393070;
double r7393072 = r7393042 * r7393071;
double r7393073 = r7393051 ? r7393065 : r7393072;
double r7393074 = r7393041 ? r7393049 : r7393073;
return r7393074;
}




Bits error versus re




Bits error versus im
Results
| Original | 58.0 |
|---|---|
| Target | 0.3 |
| Herbie | 27.9 |
if (cos re) < -0.024407493522205715Initial program 57.9
if -0.024407493522205715 < (cos re) < 0.9991588276041066Initial program 58.4
Simplified58.5
Taylor expanded around 0 62.4
Simplified62.4
Taylor expanded around 0 50.7
rmApplied add-cube-cbrt50.7
rmApplied add-cube-cbrt50.7
if 0.9991588276041066 < (cos re) Initial program 57.9
Simplified57.9
Taylor expanded around 0 1.8
Simplified1.8
rmApplied sub-neg1.8
Applied distribute-lft-in1.8
Applied associate-+l+1.8
Simplified1.8
Final simplification27.9
herbie shell --seed 2019139
(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))))