\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)\left(1 \cdot \left(\left(0.5 \cdot \sin re\right) \cdot {im}^{3}\right)\right) \cdot \frac{-1}{3} + \left(0.5 \cdot \sin re\right) \cdot \left(-\left(\frac{1}{60} \cdot {im}^{5} + 2 \cdot im\right)\right)double f(double re, double im) {
double r181634 = 0.5;
double r181635 = re;
double r181636 = sin(r181635);
double r181637 = r181634 * r181636;
double r181638 = im;
double r181639 = -r181638;
double r181640 = exp(r181639);
double r181641 = exp(r181638);
double r181642 = r181640 - r181641;
double r181643 = r181637 * r181642;
return r181643;
}
double f(double re, double im) {
double r181644 = 1.0;
double r181645 = 0.5;
double r181646 = re;
double r181647 = sin(r181646);
double r181648 = r181645 * r181647;
double r181649 = im;
double r181650 = 3.0;
double r181651 = pow(r181649, r181650);
double r181652 = r181648 * r181651;
double r181653 = r181644 * r181652;
double r181654 = -0.3333333333333333;
double r181655 = r181653 * r181654;
double r181656 = 0.016666666666666666;
double r181657 = 5.0;
double r181658 = pow(r181649, r181657);
double r181659 = r181656 * r181658;
double r181660 = 2.0;
double r181661 = r181660 * r181649;
double r181662 = r181659 + r181661;
double r181663 = -r181662;
double r181664 = r181648 * r181663;
double r181665 = r181655 + r181664;
return r181665;
}




Bits error versus re




Bits error versus im
Results
| Original | 43.3 |
|---|---|
| Target | 0.3 |
| Herbie | 0.7 |
Initial program 43.3
Taylor expanded around 0 0.7
rmApplied distribute-neg-in0.7
Applied distribute-lft-in0.7
Simplified0.7
rmApplied *-un-lft-identity0.7
Final simplification0.7
herbie shell --seed 2020046
(FPCore (re im)
:name "math.cos on complex, imaginary part"
:precision binary64
:herbie-target
(if (< (fabs im) 1) (- (* (sin re) (+ (+ im (* (* (* 0.16666666666666666 im) im) im)) (* (* (* (* (* 0.008333333333333333 im) im) im) im) im)))) (* (* 0.5 (sin re)) (- (exp (- im)) (exp im))))
(* (* 0.5 (sin re)) (- (exp (- im)) (exp im))))