\left(0.5 \cdot \cos re\right) \cdot \left(e^{0 - im} - e^{im}\right)\left(\left(\left(im \cdot \left(im \cdot im\right)\right) \cdot \frac{-1}{3} + \frac{-1}{60} \cdot {im}^{5}\right) - \left(im + im\right)\right) \cdot \left(0.5 \cdot \cos re\right)double f(double re, double im) {
double r8919908 = 0.5;
double r8919909 = re;
double r8919910 = cos(r8919909);
double r8919911 = r8919908 * r8919910;
double r8919912 = 0.0;
double r8919913 = im;
double r8919914 = r8919912 - r8919913;
double r8919915 = exp(r8919914);
double r8919916 = exp(r8919913);
double r8919917 = r8919915 - r8919916;
double r8919918 = r8919911 * r8919917;
return r8919918;
}
double f(double re, double im) {
double r8919919 = im;
double r8919920 = r8919919 * r8919919;
double r8919921 = r8919919 * r8919920;
double r8919922 = -0.3333333333333333;
double r8919923 = r8919921 * r8919922;
double r8919924 = -0.016666666666666666;
double r8919925 = 5.0;
double r8919926 = pow(r8919919, r8919925);
double r8919927 = r8919924 * r8919926;
double r8919928 = r8919923 + r8919927;
double r8919929 = r8919919 + r8919919;
double r8919930 = r8919928 - r8919929;
double r8919931 = 0.5;
double r8919932 = re;
double r8919933 = cos(r8919932);
double r8919934 = r8919931 * r8919933;
double r8919935 = r8919930 * r8919934;
return r8919935;
}




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
rmApplied *-commutative0.7
Final simplification0.7
herbie shell --seed 2019163
(FPCore (re im)
:name "math.sin on complex, imaginary part"
:herbie-target
(if (< (fabs im) 1) (- (* (cos re) (+ (+ im (* (* (* 1/6 im) im) im)) (* (* (* (* (* 1/120 im) im) im) im) im)))) (* (* 0.5 (cos re)) (- (exp (- 0 im)) (exp im))))
(* (* 0.5 (cos re)) (- (exp (- 0 im)) (exp im))))