double f(double re, double im) {
double r45642880 = 0.5;
double r45642881 = re;
double r45642882 = sin(r45642881);
double r45642883 = r45642880 * r45642882;
double r45642884 = im;
double r45642885 = -r45642884;
double r45642886 = exp(r45642885);
double r45642887 = exp(r45642884);
double r45642888 = r45642886 - r45642887;
double r45642889 = r45642883 * r45642888;
return r45642889;
}
double f(double re, double im) {
double r45642890 = im;
double r45642891 = 5.0;
double r45642892 = pow(r45642890, r45642891);
double r45642893 = -0.016666666666666666;
double r45642894 = r45642892 * r45642893;
double r45642895 = 0.5;
double r45642896 = re;
double r45642897 = sin(r45642896);
double r45642898 = r45642895 * r45642897;
double r45642899 = r45642894 * r45642898;
double r45642900 = r45642898 * r45642890;
double r45642901 = r45642890 * r45642890;
double r45642902 = -0.3333333333333333;
double r45642903 = r45642901 * r45642902;
double r45642904 = -2.0;
double r45642905 = r45642903 + r45642904;
double r45642906 = r45642900 * r45642905;
double r45642907 = r45642899 + r45642906;
return r45642907;
}
\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)\left({im}^{5} \cdot \frac{-1}{60}\right) \cdot \left(0.5 \cdot \sin re\right) + \left(\left(0.5 \cdot \sin re\right) \cdot im\right) \cdot \left(\left(im \cdot im\right) \cdot \frac{-1}{3} + -2\right)



Bits error versus re




Bits error versus im
| Original | 43.4 |
|---|---|
| Target | 0.3 |
| Herbie | 0.7 |
Initial program 43.4
Taylor expanded around 0 0.7
Simplified0.7
rmApplied sub-neg0.7
Applied distribute-lft-in0.7
Simplified0.7
Final simplification0.7
herbie shell --seed 2019102
(FPCore (re im)
:name "math.cos on complex, imaginary part"
:herbie-target
(if (< (fabs im) 1) (- (* (sin re) (+ (+ im (* (* (* 1/6 im) im) im)) (* (* (* (* (* 1/120 im) im) im) im) im)))) (* (* 0.5 (sin re)) (- (exp (- im)) (exp im))))
(* (* 0.5 (sin re)) (- (exp (- im)) (exp im))))