\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(\left(im \cdot im\right) \cdot im\right) \cdot \frac{-1}{3} - \mathsf{fma}\left(\frac{1}{60}, {im}^{5}, 2 \cdot im\right)\right)double f(double re, double im) {
double r11710579 = 0.5;
double r11710580 = re;
double r11710581 = cos(r11710580);
double r11710582 = r11710579 * r11710581;
double r11710583 = 0.0;
double r11710584 = im;
double r11710585 = r11710583 - r11710584;
double r11710586 = exp(r11710585);
double r11710587 = exp(r11710584);
double r11710588 = r11710586 - r11710587;
double r11710589 = r11710582 * r11710588;
return r11710589;
}
double f(double re, double im) {
double r11710590 = 0.5;
double r11710591 = re;
double r11710592 = cos(r11710591);
double r11710593 = r11710590 * r11710592;
double r11710594 = im;
double r11710595 = r11710594 * r11710594;
double r11710596 = r11710595 * r11710594;
double r11710597 = -0.3333333333333333;
double r11710598 = r11710596 * r11710597;
double r11710599 = 0.016666666666666666;
double r11710600 = 5.0;
double r11710601 = pow(r11710594, r11710600);
double r11710602 = 2.0;
double r11710603 = r11710602 * r11710594;
double r11710604 = fma(r11710599, r11710601, r11710603);
double r11710605 = r11710598 - r11710604;
double r11710606 = r11710593 * r11710605;
return r11710606;
}




Bits error versus re




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