\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)\left(\left(\left(\left(\frac{-1}{3} \cdot im\right) \cdot im - 2\right) \cdot im - {im}^{5} \cdot \frac{1}{60}\right) \cdot 0.5\right) \cdot \sin redouble f(double re, double im) {
double r11610832 = 0.5;
double r11610833 = re;
double r11610834 = sin(r11610833);
double r11610835 = r11610832 * r11610834;
double r11610836 = im;
double r11610837 = -r11610836;
double r11610838 = exp(r11610837);
double r11610839 = exp(r11610836);
double r11610840 = r11610838 - r11610839;
double r11610841 = r11610835 * r11610840;
return r11610841;
}
double f(double re, double im) {
double r11610842 = -0.3333333333333333;
double r11610843 = im;
double r11610844 = r11610842 * r11610843;
double r11610845 = r11610844 * r11610843;
double r11610846 = 2.0;
double r11610847 = r11610845 - r11610846;
double r11610848 = r11610847 * r11610843;
double r11610849 = 5.0;
double r11610850 = pow(r11610843, r11610849);
double r11610851 = 0.016666666666666666;
double r11610852 = r11610850 * r11610851;
double r11610853 = r11610848 - r11610852;
double r11610854 = 0.5;
double r11610855 = r11610853 * r11610854;
double r11610856 = re;
double r11610857 = sin(r11610856);
double r11610858 = r11610855 * r11610857;
return r11610858;
}




Bits error versus re




Bits error versus im
Results
| Original | 43.6 |
|---|---|
| Target | 0.3 |
| Herbie | 0.7 |
Initial program 43.6
Taylor expanded around 0 0.7
Simplified0.7
rmApplied pow10.7
Applied pow10.7
Applied pow10.7
Applied pow-prod-down0.7
Applied pow-prod-down0.7
Simplified0.7
Final simplification0.7
herbie shell --seed 2019158
(FPCore (re im)
:name "math.cos on complex, imaginary part"
:herbie-target
(if (< (fabs im) 1) (- (* (sin re) (+ (+ im (* (* (* 1/6 im) im) im)) (* (* (* (* (* 1/120 im) im) im) im) im)))) (* (* 0.5 (sin re)) (- (exp (- im)) (exp im))))
(* (* 0.5 (sin re)) (- (exp (- im)) (exp im))))