double f(double re, double im) {
double r50745610 = 0.5;
double r50745611 = re;
double r50745612 = sin(r50745611);
double r50745613 = r50745610 * r50745612;
double r50745614 = im;
double r50745615 = -r50745614;
double r50745616 = exp(r50745615);
double r50745617 = exp(r50745614);
double r50745618 = r50745616 - r50745617;
double r50745619 = r50745613 * r50745618;
return r50745619;
}
double f(double re, double im) {
double r50745620 = 0.5;
double r50745621 = re;
double r50745622 = sin(r50745621);
double r50745623 = r50745620 * r50745622;
double r50745624 = im;
double r50745625 = 5.0;
double r50745626 = pow(r50745624, r50745625);
double r50745627 = -0.016666666666666666;
double r50745628 = -0.3333333333333333;
double r50745629 = r50745624 * r50745628;
double r50745630 = r50745624 * r50745629;
double r50745631 = r50745630 * r50745630;
double r50745632 = 4.0;
double r50745633 = r50745631 - r50745632;
double r50745634 = r50745633 * r50745624;
double r50745635 = 2.0;
double r50745636 = r50745635 + r50745630;
double r50745637 = r50745634 / r50745636;
double r50745638 = fma(r50745626, r50745627, r50745637);
double r50745639 = r50745623 * r50745638;
return r50745639;
}
\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)\left(0.5 \cdot \sin re\right) \cdot (\left({im}^{5}\right) \cdot \frac{-1}{60} + \left(\frac{\left(\left(im \cdot \left(im \cdot \frac{-1}{3}\right)\right) \cdot \left(im \cdot \left(im \cdot \frac{-1}{3}\right)\right) - 4\right) \cdot im}{2 + im \cdot \left(im \cdot \frac{-1}{3}\right)}\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 flip--0.7
Applied associate-*r/0.7
Final simplification0.7
herbie shell --seed 2019102 +o rules:numerics
(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))))