\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)\left(0.5 \cdot \sin re\right) \cdot \left(\frac{-1}{3} \cdot {im}^{3} - \left(\frac{1}{60} \cdot {im}^{5} + 2 \cdot im\right)\right)double f(double re, double im) {
double r294374 = 0.5;
double r294375 = re;
double r294376 = sin(r294375);
double r294377 = r294374 * r294376;
double r294378 = im;
double r294379 = -r294378;
double r294380 = exp(r294379);
double r294381 = exp(r294378);
double r294382 = r294380 - r294381;
double r294383 = r294377 * r294382;
return r294383;
}
double f(double re, double im) {
double r294384 = 0.5;
double r294385 = re;
double r294386 = sin(r294385);
double r294387 = r294384 * r294386;
double r294388 = -0.3333333333333333;
double r294389 = im;
double r294390 = 3.0;
double r294391 = pow(r294389, r294390);
double r294392 = r294388 * r294391;
double r294393 = 0.016666666666666666;
double r294394 = 5.0;
double r294395 = pow(r294389, r294394);
double r294396 = r294393 * r294395;
double r294397 = 2.0;
double r294398 = r294397 * r294389;
double r294399 = r294396 + r294398;
double r294400 = r294392 - r294399;
double r294401 = r294387 * r294400;
return r294401;
}




Bits error versus re




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