\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)0.5 \cdot \left(\sin re \cdot \left(\frac{-1}{3} \cdot {im}^{3}\right)\right) + \left(0.5 \cdot \sin re\right) \cdot \left(-\mathsf{fma}\left(\frac{1}{60}, {im}^{5}, 2 \cdot im\right)\right)double f(double re, double im) {
double r198541 = 0.5;
double r198542 = re;
double r198543 = sin(r198542);
double r198544 = r198541 * r198543;
double r198545 = im;
double r198546 = -r198545;
double r198547 = exp(r198546);
double r198548 = exp(r198545);
double r198549 = r198547 - r198548;
double r198550 = r198544 * r198549;
return r198550;
}
double f(double re, double im) {
double r198551 = 0.5;
double r198552 = re;
double r198553 = sin(r198552);
double r198554 = -0.3333333333333333;
double r198555 = im;
double r198556 = 3.0;
double r198557 = pow(r198555, r198556);
double r198558 = r198554 * r198557;
double r198559 = r198553 * r198558;
double r198560 = r198551 * r198559;
double r198561 = r198551 * r198553;
double r198562 = 0.016666666666666666;
double r198563 = 5.0;
double r198564 = pow(r198555, r198563);
double r198565 = 2.0;
double r198566 = r198565 * r198555;
double r198567 = fma(r198562, r198564, r198566);
double r198568 = -r198567;
double r198569 = r198561 * r198568;
double r198570 = r198560 + r198569;
return r198570;
}




Bits error versus re




Bits error versus im
| Original | 43.3 |
|---|---|
| Target | 0.3 |
| Herbie | 0.8 |
Initial program 43.3
Taylor expanded around 0 0.8
Simplified0.8
rmApplied sub-neg0.8
Applied distribute-lft-in0.8
Simplified0.8
Final simplification0.8
herbie shell --seed 2020064 +o rules:numerics
(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))))