\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)\left(\frac{-1}{3} \cdot \left(im \cdot \left(im \cdot im\right)\right) - \mathsf{fma}\left(\frac{1}{60}, {im}^{5}, im + im\right)\right) \cdot \left(0.5 \cdot \sin re\right)double f(double re, double im) {
double r8349346 = 0.5;
double r8349347 = re;
double r8349348 = sin(r8349347);
double r8349349 = r8349346 * r8349348;
double r8349350 = im;
double r8349351 = -r8349350;
double r8349352 = exp(r8349351);
double r8349353 = exp(r8349350);
double r8349354 = r8349352 - r8349353;
double r8349355 = r8349349 * r8349354;
return r8349355;
}
double f(double re, double im) {
double r8349356 = -0.3333333333333333;
double r8349357 = im;
double r8349358 = r8349357 * r8349357;
double r8349359 = r8349357 * r8349358;
double r8349360 = r8349356 * r8349359;
double r8349361 = 0.016666666666666666;
double r8349362 = 5.0;
double r8349363 = pow(r8349357, r8349362);
double r8349364 = r8349357 + r8349357;
double r8349365 = fma(r8349361, r8349363, r8349364);
double r8349366 = r8349360 - r8349365;
double r8349367 = 0.5;
double r8349368 = re;
double r8349369 = sin(r8349368);
double r8349370 = r8349367 * r8349369;
double r8349371 = r8349366 * r8349370;
return r8349371;
}




Bits error versus re




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