\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 r202381 = 0.5;
double r202382 = re;
double r202383 = cos(r202382);
double r202384 = r202381 * r202383;
double r202385 = 0.0;
double r202386 = im;
double r202387 = r202385 - r202386;
double r202388 = exp(r202387);
double r202389 = exp(r202386);
double r202390 = r202388 - r202389;
double r202391 = r202384 * r202390;
return r202391;
}
double f(double re, double im) {
double r202392 = 0.5;
double r202393 = re;
double r202394 = cos(r202393);
double r202395 = r202392 * r202394;
double r202396 = 0.3333333333333333;
double r202397 = im;
double r202398 = 3.0;
double r202399 = pow(r202397, r202398);
double r202400 = r202396 * r202399;
double r202401 = -r202400;
double r202402 = 0.016666666666666666;
double r202403 = 5.0;
double r202404 = pow(r202397, r202403);
double r202405 = 2.0;
double r202406 = r202405 * r202397;
double r202407 = fma(r202402, r202404, r202406);
double r202408 = r202401 - r202407;
double r202409 = r202395 * r202408;
return r202409;
}




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 2020039 +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))))