\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({im}^{3} \cdot \frac{-1}{3} - \left(\frac{1}{60} \cdot {im}^{5} + 2 \cdot im\right)\right)double f(double re, double im) {
double r140889 = 0.5;
double r140890 = re;
double r140891 = cos(r140890);
double r140892 = r140889 * r140891;
double r140893 = 0.0;
double r140894 = im;
double r140895 = r140893 - r140894;
double r140896 = exp(r140895);
double r140897 = exp(r140894);
double r140898 = r140896 - r140897;
double r140899 = r140892 * r140898;
return r140899;
}
double f(double re, double im) {
double r140900 = 0.5;
double r140901 = re;
double r140902 = cos(r140901);
double r140903 = r140900 * r140902;
double r140904 = im;
double r140905 = 3.0;
double r140906 = pow(r140904, r140905);
double r140907 = -0.3333333333333333;
double r140908 = r140906 * r140907;
double r140909 = 0.016666666666666666;
double r140910 = 5.0;
double r140911 = pow(r140904, r140910);
double r140912 = r140909 * r140911;
double r140913 = 2.0;
double r140914 = r140913 * r140904;
double r140915 = r140912 + r140914;
double r140916 = r140908 - r140915;
double r140917 = r140903 * r140916;
return r140917;
}




Bits error versus re




Bits error versus im
Results
| Original | 58.1 |
|---|---|
| Target | 0.2 |
| Herbie | 0.7 |
Initial program 58.1
Taylor expanded around 0 0.7
Simplified0.7
Final simplification0.7
herbie shell --seed 2019323
(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))))