\left(0.5 \cdot \cos re\right) \cdot \left(e^{0.0 - im} - e^{im}\right)\left(\left(\frac{-1}{3} \cdot \left(im \cdot \left(im \cdot im\right)\right) - \left(im + im\right)\right) - \frac{1}{60} \cdot {im}^{5}\right) \cdot \left(0.5 \cdot \cos re\right)double f(double re, double im) {
double r9241829 = 0.5;
double r9241830 = re;
double r9241831 = cos(r9241830);
double r9241832 = r9241829 * r9241831;
double r9241833 = 0.0;
double r9241834 = im;
double r9241835 = r9241833 - r9241834;
double r9241836 = exp(r9241835);
double r9241837 = exp(r9241834);
double r9241838 = r9241836 - r9241837;
double r9241839 = r9241832 * r9241838;
return r9241839;
}
double f(double re, double im) {
double r9241840 = -0.3333333333333333;
double r9241841 = im;
double r9241842 = r9241841 * r9241841;
double r9241843 = r9241841 * r9241842;
double r9241844 = r9241840 * r9241843;
double r9241845 = r9241841 + r9241841;
double r9241846 = r9241844 - r9241845;
double r9241847 = 0.016666666666666666;
double r9241848 = 5.0;
double r9241849 = pow(r9241841, r9241848);
double r9241850 = r9241847 * r9241849;
double r9241851 = r9241846 - r9241850;
double r9241852 = 0.5;
double r9241853 = re;
double r9241854 = cos(r9241853);
double r9241855 = r9241852 * r9241854;
double r9241856 = r9241851 * r9241855;
return r9241856;
}




Bits error versus re




Bits error versus im
Results
| Original | 58.0 |
|---|---|
| Target | 0.3 |
| Herbie | 0.7 |
Initial program 58.0
Taylor expanded around 0 0.7
Simplified0.7
Final simplification0.7
herbie shell --seed 2019174
(FPCore (re im)
:name "math.sin on complex, imaginary part"
:herbie-target
(if (< (fabs im) 1.0) (- (* (cos re) (+ (+ im (* (* (* 0.16666666666666666 im) im) im)) (* (* (* (* (* 0.008333333333333333 im) im) im) im) im)))) (* (* 0.5 (cos re)) (- (exp (- 0.0 im)) (exp im))))
(* (* 0.5 (cos re)) (- (exp (- 0.0 im)) (exp im))))