\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(-\mathsf{fma}\left(\frac{1}{3}, {im}^{3}, \mathsf{fma}\left(\frac{1}{60}, {im}^{5}, 2 \cdot im\right)\right)\right)double f(double re, double im) {
double r201773 = 0.5;
double r201774 = re;
double r201775 = cos(r201774);
double r201776 = r201773 * r201775;
double r201777 = 0.0;
double r201778 = im;
double r201779 = r201777 - r201778;
double r201780 = exp(r201779);
double r201781 = exp(r201778);
double r201782 = r201780 - r201781;
double r201783 = r201776 * r201782;
return r201783;
}
double f(double re, double im) {
double r201784 = 0.5;
double r201785 = re;
double r201786 = cos(r201785);
double r201787 = r201784 * r201786;
double r201788 = 0.3333333333333333;
double r201789 = im;
double r201790 = 3.0;
double r201791 = pow(r201789, r201790);
double r201792 = 0.016666666666666666;
double r201793 = 5.0;
double r201794 = pow(r201789, r201793);
double r201795 = 2.0;
double r201796 = r201795 * r201789;
double r201797 = fma(r201792, r201794, r201796);
double r201798 = fma(r201788, r201791, r201797);
double r201799 = -r201798;
double r201800 = r201787 * r201799;
return r201800;
}




Bits error versus re




Bits error versus im
| Original | 57.9 |
|---|---|
| Target | 0.2 |
| Herbie | 0.7 |
Initial program 57.9
Taylor expanded around 0 0.7
Simplified0.7
Final simplification0.7
herbie shell --seed 2020045 +o rules:numerics
(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))))