\left(0.5 \cdot \cos re\right) \cdot \left(e^{0.0 - im} - e^{im}\right)\left(0.5 \cdot \cos re\right) \cdot \left(-\left(\left(\frac{1}{3} \cdot {im}^{3} + \frac{1}{60} \cdot {im}^{5}\right) + 2 \cdot im\right)\right)double f(double re, double im) {
double r100088 = 0.5;
double r100089 = re;
double r100090 = cos(r100089);
double r100091 = r100088 * r100090;
double r100092 = 0.0;
double r100093 = im;
double r100094 = r100092 - r100093;
double r100095 = exp(r100094);
double r100096 = exp(r100093);
double r100097 = r100095 - r100096;
double r100098 = r100091 * r100097;
return r100098;
}
double f(double re, double im) {
double r100099 = 0.5;
double r100100 = re;
double r100101 = cos(r100100);
double r100102 = r100099 * r100101;
double r100103 = 0.3333333333333333;
double r100104 = im;
double r100105 = 3.0;
double r100106 = pow(r100104, r100105);
double r100107 = r100103 * r100106;
double r100108 = 0.016666666666666666;
double r100109 = 5.0;
double r100110 = pow(r100104, r100109);
double r100111 = r100108 * r100110;
double r100112 = r100107 + r100111;
double r100113 = 2.0;
double r100114 = r100113 * r100104;
double r100115 = r100112 + r100114;
double r100116 = -r100115;
double r100117 = r100102 * r100116;
return r100117;
}




Bits error versus re




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