\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)-\left(\left(\left(\left(im \cdot \left(im \cdot im\right)\right) \cdot \left(im \cdot im\right)\right) \cdot 0.008333333333333333 + im \cdot 1.0\right) \cdot \sin re + \sin re \cdot \left(\left(im \cdot \left(im \cdot im\right)\right) \cdot 0.16666666666666666\right)\right)
double f(double re, double im) {
double r7610286 = 0.5;
double r7610287 = re;
double r7610288 = sin(r7610287);
double r7610289 = r7610286 * r7610288;
double r7610290 = im;
double r7610291 = -r7610290;
double r7610292 = exp(r7610291);
double r7610293 = exp(r7610290);
double r7610294 = r7610292 - r7610293;
double r7610295 = r7610289 * r7610294;
return r7610295;
}
double f(double re, double im) {
double r7610296 = im;
double r7610297 = r7610296 * r7610296;
double r7610298 = r7610296 * r7610297;
double r7610299 = r7610298 * r7610297;
double r7610300 = 0.008333333333333333;
double r7610301 = r7610299 * r7610300;
double r7610302 = 1.0;
double r7610303 = r7610296 * r7610302;
double r7610304 = r7610301 + r7610303;
double r7610305 = re;
double r7610306 = sin(r7610305);
double r7610307 = r7610304 * r7610306;
double r7610308 = 0.16666666666666666;
double r7610309 = r7610298 * r7610308;
double r7610310 = r7610306 * r7610309;
double r7610311 = r7610307 + r7610310;
double r7610312 = -r7610311;
return r7610312;
}




Bits error versus re




Bits error versus im
Results
| Original | 43.5 |
|---|---|
| Target | 0.2 |
| Herbie | 0.8 |
Initial program 43.5
Taylor expanded around 0 0.8
Simplified0.8
Taylor expanded around -inf 0.8
Simplified0.8
Final simplification0.8
herbie shell --seed 2019142
(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))))