\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 r209417 = 0.5;
double r209418 = re;
double r209419 = cos(r209418);
double r209420 = r209417 * r209419;
double r209421 = 0.0;
double r209422 = im;
double r209423 = r209421 - r209422;
double r209424 = exp(r209423);
double r209425 = exp(r209422);
double r209426 = r209424 - r209425;
double r209427 = r209420 * r209426;
return r209427;
}
double f(double re, double im) {
double r209428 = 0.5;
double r209429 = re;
double r209430 = cos(r209429);
double r209431 = r209428 * r209430;
double r209432 = 0.3333333333333333;
double r209433 = im;
double r209434 = 3.0;
double r209435 = pow(r209433, r209434);
double r209436 = r209432 * r209435;
double r209437 = -r209436;
double r209438 = 0.016666666666666666;
double r209439 = 5.0;
double r209440 = pow(r209433, r209439);
double r209441 = 2.0;
double r209442 = r209441 * r209433;
double r209443 = fma(r209438, r209440, r209442);
double r209444 = r209437 - r209443;
double r209445 = r209431 * r209444;
return r209445;
}




Bits error versus re




Bits error versus im
| Original | 58.1 |
|---|---|
| Target | 0.3 |
| Herbie | 0.7 |
Initial program 58.1
Taylor expanded around 0 0.7
Simplified0.7
Final simplification0.7
herbie shell --seed 2020002 +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))))