\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(-\frac{1}{3} \cdot {im}^{3}\right) - \mathsf{fma}\left(\frac{1}{60}, {im}^{5}, 2 \cdot im\right)\right)double f(double re, double im) {
double r246399 = 0.5;
double r246400 = re;
double r246401 = cos(r246400);
double r246402 = r246399 * r246401;
double r246403 = 0.0;
double r246404 = im;
double r246405 = r246403 - r246404;
double r246406 = exp(r246405);
double r246407 = exp(r246404);
double r246408 = r246406 - r246407;
double r246409 = r246402 * r246408;
return r246409;
}
double f(double re, double im) {
double r246410 = 0.5;
double r246411 = re;
double r246412 = cos(r246411);
double r246413 = r246410 * r246412;
double r246414 = 0.3333333333333333;
double r246415 = im;
double r246416 = 3.0;
double r246417 = pow(r246415, r246416);
double r246418 = r246414 * r246417;
double r246419 = -r246418;
double r246420 = 0.016666666666666666;
double r246421 = 5.0;
double r246422 = pow(r246415, r246421);
double r246423 = 2.0;
double r246424 = r246423 * r246415;
double r246425 = fma(r246420, r246422, r246424);
double r246426 = r246419 - r246425;
double r246427 = r246413 * r246426;
return r246427;
}




Bits error versus re




Bits error versus im
| Original | 58.0 |
|---|---|
| Target | 0.3 |
| Herbie | 0.8 |
Initial program 58.0
Taylor expanded around 0 0.8
Simplified0.8
Final simplification0.8
herbie shell --seed 2019353 +o rules:numerics
(FPCore (re im)
:name "math.sin on complex, imaginary part"
:precision binary64
:herbie-target
(if (< (fabs im) 1) (- (* (cos re) (+ (+ im (* (* (* 0.16666666666666666 im) im) im)) (* (* (* (* (* 0.008333333333333333 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))))