\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)\left(0.5 \cdot \sin re\right) \cdot \left({im}^{3} \cdot \frac{-1}{3} - \left(\frac{1}{60} \cdot {im}^{5} + 2 \cdot im\right)\right)double f(double re, double im) {
double r182548 = 0.5;
double r182549 = re;
double r182550 = sin(r182549);
double r182551 = r182548 * r182550;
double r182552 = im;
double r182553 = -r182552;
double r182554 = exp(r182553);
double r182555 = exp(r182552);
double r182556 = r182554 - r182555;
double r182557 = r182551 * r182556;
return r182557;
}
double f(double re, double im) {
double r182558 = 0.5;
double r182559 = re;
double r182560 = sin(r182559);
double r182561 = r182558 * r182560;
double r182562 = im;
double r182563 = 3.0;
double r182564 = pow(r182562, r182563);
double r182565 = -0.3333333333333333;
double r182566 = r182564 * r182565;
double r182567 = 0.016666666666666666;
double r182568 = 5.0;
double r182569 = pow(r182562, r182568);
double r182570 = r182567 * r182569;
double r182571 = 2.0;
double r182572 = r182571 * r182562;
double r182573 = r182570 + r182572;
double r182574 = r182566 - r182573;
double r182575 = r182561 * r182574;
return r182575;
}




Bits error versus re




Bits error versus im
Results
| Original | 43.7 |
|---|---|
| Target | 0.3 |
| Herbie | 0.7 |
Initial program 43.7
Taylor expanded around 0 0.7
Simplified0.7
Final simplification0.7
herbie shell --seed 2019235
(FPCore (re im)
:name "math.cos on complex, imaginary part"
:precision binary64
:herbie-target
(if (< (fabs im) 1) (- (* (sin re) (+ (+ im (* (* (* 0.166666666666666657 im) im) im)) (* (* (* (* (* 0.00833333333333333322 im) im) im) im) im)))) (* (* 0.5 (sin re)) (- (exp (- im)) (exp im))))
(* (* 0.5 (sin re)) (- (exp (- im)) (exp im))))