\left(0.5 \cdot \cos re\right) \cdot \left(e^{0.0 - im} - e^{im}\right)\left(\left(im \cdot \left(im \cdot im\right)\right) \cdot \frac{-1}{3} - \mathsf{fma}\left(\frac{1}{60}, {im}^{5}, im + im\right)\right) \cdot \left(0.5 \cdot \cos re\right)double f(double re, double im) {
double r6922352 = 0.5;
double r6922353 = re;
double r6922354 = cos(r6922353);
double r6922355 = r6922352 * r6922354;
double r6922356 = 0.0;
double r6922357 = im;
double r6922358 = r6922356 - r6922357;
double r6922359 = exp(r6922358);
double r6922360 = exp(r6922357);
double r6922361 = r6922359 - r6922360;
double r6922362 = r6922355 * r6922361;
return r6922362;
}
double f(double re, double im) {
double r6922363 = im;
double r6922364 = r6922363 * r6922363;
double r6922365 = r6922363 * r6922364;
double r6922366 = -0.3333333333333333;
double r6922367 = r6922365 * r6922366;
double r6922368 = 0.016666666666666666;
double r6922369 = 5.0;
double r6922370 = pow(r6922363, r6922369);
double r6922371 = r6922363 + r6922363;
double r6922372 = fma(r6922368, r6922370, r6922371);
double r6922373 = r6922367 - r6922372;
double r6922374 = 0.5;
double r6922375 = re;
double r6922376 = cos(r6922375);
double r6922377 = r6922374 * r6922376;
double r6922378 = r6922373 * r6922377;
return r6922378;
}




Bits error versus re




Bits error versus im
| Original | 58.3 |
|---|---|
| Target | 0.3 |
| Herbie | 0.6 |
Initial program 58.3
Taylor expanded around 0 0.6
Simplified0.6
Final simplification0.6
herbie shell --seed 2019172 +o rules:numerics
(FPCore (re im)
:name "math.sin on complex, imaginary part"
:herbie-target
(if (< (fabs im) 1.0) (- (* (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))))