\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)\left(0.16666666666666666 \cdot \sin re\right) \cdot \left(-im \cdot \left(im \cdot im\right)\right) - \left(\left(im \cdot \sin re\right) \cdot 1.0 + \left(0.008333333333333333 \cdot {im}^{5}\right) \cdot \sin re\right)double f(double re, double im) {
double r7298638 = 0.5;
double r7298639 = re;
double r7298640 = sin(r7298639);
double r7298641 = r7298638 * r7298640;
double r7298642 = im;
double r7298643 = -r7298642;
double r7298644 = exp(r7298643);
double r7298645 = exp(r7298642);
double r7298646 = r7298644 - r7298645;
double r7298647 = r7298641 * r7298646;
return r7298647;
}
double f(double re, double im) {
double r7298648 = 0.16666666666666666;
double r7298649 = re;
double r7298650 = sin(r7298649);
double r7298651 = r7298648 * r7298650;
double r7298652 = im;
double r7298653 = r7298652 * r7298652;
double r7298654 = r7298652 * r7298653;
double r7298655 = -r7298654;
double r7298656 = r7298651 * r7298655;
double r7298657 = r7298652 * r7298650;
double r7298658 = 1.0;
double r7298659 = r7298657 * r7298658;
double r7298660 = 0.008333333333333333;
double r7298661 = 5.0;
double r7298662 = pow(r7298652, r7298661);
double r7298663 = r7298660 * r7298662;
double r7298664 = r7298663 * r7298650;
double r7298665 = r7298659 + r7298664;
double r7298666 = r7298656 - r7298665;
return r7298666;
}




Bits error versus re




Bits error versus im
Results
| Original | 43.4 |
|---|---|
| Target | 0.3 |
| Herbie | 0.8 |
Initial program 43.4
Taylor expanded around 0 0.9
Simplified0.9
Taylor expanded around inf 0.8
Simplified0.8
Final simplification0.8
herbie shell --seed 2019134
(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))))