\left(0.5 \cdot \cos re\right) \cdot \left(e^{0.0 - im} - e^{im}\right)\left(0.5 \cdot \cos re\right) \cdot \left(-\left(\frac{1}{3} \cdot {im}^{3} + \left(\frac{1}{60} \cdot {im}^{5} + 2 \cdot im\right)\right)\right)double f(double re, double im) {
double r132609 = 0.5;
double r132610 = re;
double r132611 = cos(r132610);
double r132612 = r132609 * r132611;
double r132613 = 0.0;
double r132614 = im;
double r132615 = r132613 - r132614;
double r132616 = exp(r132615);
double r132617 = exp(r132614);
double r132618 = r132616 - r132617;
double r132619 = r132612 * r132618;
return r132619;
}
double f(double re, double im) {
double r132620 = 0.5;
double r132621 = re;
double r132622 = cos(r132621);
double r132623 = r132620 * r132622;
double r132624 = 0.3333333333333333;
double r132625 = im;
double r132626 = 3.0;
double r132627 = pow(r132625, r132626);
double r132628 = r132624 * r132627;
double r132629 = 0.016666666666666666;
double r132630 = 5.0;
double r132631 = pow(r132625, r132630);
double r132632 = r132629 * r132631;
double r132633 = 2.0;
double r132634 = r132633 * r132625;
double r132635 = r132632 + r132634;
double r132636 = r132628 + r132635;
double r132637 = -r132636;
double r132638 = r132623 * r132637;
return r132638;
}




Bits error versus re




Bits error versus im
Results
| Original | 57.9 |
|---|---|
| Target | 0.3 |
| Herbie | 0.8 |
Initial program 57.9
Taylor expanded around 0 0.8
Final simplification0.8
herbie shell --seed 2020018
(FPCore (re im)
:name "math.sin on complex, imaginary part"
:precision binary64
:herbie-target
(if (< (fabs im) 1) (- (* (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))))