\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(im \cdot \left(im \cdot im\right)\right) \cdot \frac{-1}{3} - \left(\left(im + im\right) + \frac{1}{60} \cdot {im}^{5}\right)\right)double f(double re, double im) {
double r11737773 = 0.5;
double r11737774 = re;
double r11737775 = cos(r11737774);
double r11737776 = r11737773 * r11737775;
double r11737777 = 0.0;
double r11737778 = im;
double r11737779 = r11737777 - r11737778;
double r11737780 = exp(r11737779);
double r11737781 = exp(r11737778);
double r11737782 = r11737780 - r11737781;
double r11737783 = r11737776 * r11737782;
return r11737783;
}
double f(double re, double im) {
double r11737784 = 0.5;
double r11737785 = re;
double r11737786 = cos(r11737785);
double r11737787 = r11737784 * r11737786;
double r11737788 = im;
double r11737789 = r11737788 * r11737788;
double r11737790 = r11737788 * r11737789;
double r11737791 = -0.3333333333333333;
double r11737792 = r11737790 * r11737791;
double r11737793 = r11737788 + r11737788;
double r11737794 = 0.016666666666666666;
double r11737795 = 5.0;
double r11737796 = pow(r11737788, r11737795);
double r11737797 = r11737794 * r11737796;
double r11737798 = r11737793 + r11737797;
double r11737799 = r11737792 - r11737798;
double r11737800 = r11737787 * r11737799;
return r11737800;
}




Bits error versus re




Bits error versus im
Results
| 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
(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))))