\left(0.5 \cdot \cos re\right) \cdot \left(e^{0 - im} - e^{im}\right)\left(\frac{-1}{3} \cdot \left(im \cdot \left(im \cdot im\right)\right) + \left({im}^{5} \cdot \frac{-1}{60} - \left(im + im\right)\right)\right) \cdot \left(0.5 \cdot \cos re\right)double f(double re, double im) {
double r8426589 = 0.5;
double r8426590 = re;
double r8426591 = cos(r8426590);
double r8426592 = r8426589 * r8426591;
double r8426593 = 0.0;
double r8426594 = im;
double r8426595 = r8426593 - r8426594;
double r8426596 = exp(r8426595);
double r8426597 = exp(r8426594);
double r8426598 = r8426596 - r8426597;
double r8426599 = r8426592 * r8426598;
return r8426599;
}
double f(double re, double im) {
double r8426600 = -0.3333333333333333;
double r8426601 = im;
double r8426602 = r8426601 * r8426601;
double r8426603 = r8426601 * r8426602;
double r8426604 = r8426600 * r8426603;
double r8426605 = 5.0;
double r8426606 = pow(r8426601, r8426605);
double r8426607 = -0.016666666666666666;
double r8426608 = r8426606 * r8426607;
double r8426609 = r8426601 + r8426601;
double r8426610 = r8426608 - r8426609;
double r8426611 = r8426604 + r8426610;
double r8426612 = 0.5;
double r8426613 = re;
double r8426614 = cos(r8426613);
double r8426615 = r8426612 * r8426614;
double r8426616 = r8426611 * r8426615;
return r8426616;
}




Bits error versus re




Bits error versus im
Results
| Original | 58.2 |
|---|---|
| Target | 0.2 |
| Herbie | 0.6 |
Initial program 58.2
Taylor expanded around 0 0.6
Simplified0.6
Final simplification0.6
herbie shell --seed 2019149
(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))))