\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)0.5 \cdot \left(\sin re \cdot \left(\frac{-1}{3} \cdot {im}^{3}\right)\right) + \left(0.5 \cdot \sin re\right) \cdot \left(-\mathsf{fma}\left(\frac{1}{60}, {im}^{5}, 2 \cdot im\right)\right)double f(double re, double im) {
double r283509 = 0.5;
double r283510 = re;
double r283511 = sin(r283510);
double r283512 = r283509 * r283511;
double r283513 = im;
double r283514 = -r283513;
double r283515 = exp(r283514);
double r283516 = exp(r283513);
double r283517 = r283515 - r283516;
double r283518 = r283512 * r283517;
return r283518;
}
double f(double re, double im) {
double r283519 = 0.5;
double r283520 = re;
double r283521 = sin(r283520);
double r283522 = -0.3333333333333333;
double r283523 = im;
double r283524 = 3.0;
double r283525 = pow(r283523, r283524);
double r283526 = r283522 * r283525;
double r283527 = r283521 * r283526;
double r283528 = r283519 * r283527;
double r283529 = r283519 * r283521;
double r283530 = 0.016666666666666666;
double r283531 = 5.0;
double r283532 = pow(r283523, r283531);
double r283533 = 2.0;
double r283534 = r283533 * r283523;
double r283535 = fma(r283530, r283532, r283534);
double r283536 = -r283535;
double r283537 = r283529 * r283536;
double r283538 = r283528 + r283537;
return r283538;
}




Bits error versus re




Bits error versus im
| Original | 43.3 |
|---|---|
| Target | 0.3 |
| Herbie | 0.8 |
Initial program 43.3
Taylor expanded around 0 0.8
Simplified0.8
rmApplied sub-neg0.8
Applied distribute-lft-in0.8
Simplified0.8
Final simplification0.8
herbie shell --seed 2020056 +o rules:numerics
(FPCore (re im)
:name "math.cos on complex, imaginary part"
:precision binary64
:herbie-target
(if (< (fabs im) 1) (- (* (sin re) (+ (+ im (* (* (* 0.16666666666666666 im) im) im)) (* (* (* (* (* 0.008333333333333333 im) im) im) im) im)))) (* (* 0.5 (sin re)) (- (exp (- im)) (exp im))))
(* (* 0.5 (sin re)) (- (exp (- im)) (exp im))))