\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)\left(\left(-im \cdot im\right) \cdot im\right) \cdot \left(\sin re \cdot 0.16666666666666666\right) - \left(1.0 \cdot im + {im}^{5} \cdot 0.008333333333333333\right) \cdot \sin redouble f(double re, double im) {
double r43497256 = 0.5;
double r43497257 = re;
double r43497258 = sin(r43497257);
double r43497259 = r43497256 * r43497258;
double r43497260 = im;
double r43497261 = -r43497260;
double r43497262 = exp(r43497261);
double r43497263 = exp(r43497260);
double r43497264 = r43497262 - r43497263;
double r43497265 = r43497259 * r43497264;
return r43497265;
}
double f(double re, double im) {
double r43497266 = im;
double r43497267 = r43497266 * r43497266;
double r43497268 = -r43497267;
double r43497269 = r43497268 * r43497266;
double r43497270 = re;
double r43497271 = sin(r43497270);
double r43497272 = 0.16666666666666666;
double r43497273 = r43497271 * r43497272;
double r43497274 = r43497269 * r43497273;
double r43497275 = 1.0;
double r43497276 = r43497275 * r43497266;
double r43497277 = 5.0;
double r43497278 = pow(r43497266, r43497277);
double r43497279 = 0.008333333333333333;
double r43497280 = r43497278 * r43497279;
double r43497281 = r43497276 + r43497280;
double r43497282 = r43497281 * r43497271;
double r43497283 = r43497274 - r43497282;
return r43497283;
}




Bits error versus re




Bits error versus im
Results
| Original | 43.4 |
|---|---|
| Target | 0.3 |
| Herbie | 0.7 |
Initial program 43.4
Taylor expanded around 0 0.7
Simplified0.7
Taylor expanded around -inf 0.7
Simplified0.7
Final simplification0.7
herbie shell --seed 2019128
(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))))