\left(0.5 \cdot \cos re\right) \cdot \left(e^{0 - im} - e^{im}\right)\begin{array}{l}
\mathbf{if}\;\left(0.5 \cdot \cos re\right) \cdot \left(e^{-im} - e^{im}\right) \le 1.6380449607278358 \cdot 10^{-06}:\\
\;\;\;\;\left(\cos re \cdot \left(-2 \cdot 0.5\right)\right) \cdot im - \cos re \cdot \mathsf{fma}\left(\left({im}^{5}\right), 0.008333333333333333, \left(\left(im \cdot 0.16666666666666666\right) \cdot \left(im \cdot im\right)\right)\right)\\
\mathbf{else}:\\
\;\;\;\;\left(\left(0.5 \cdot \cos re\right) \cdot \left(\sqrt{e^{-im}} + \sqrt{e^{im}}\right)\right) \cdot \left(\sqrt{e^{-im}} - \sqrt{e^{im}}\right)\\
\end{array}double f(double re, double im) {
double r32824778 = 0.5;
double r32824779 = re;
double r32824780 = cos(r32824779);
double r32824781 = r32824778 * r32824780;
double r32824782 = 0.0;
double r32824783 = im;
double r32824784 = r32824782 - r32824783;
double r32824785 = exp(r32824784);
double r32824786 = exp(r32824783);
double r32824787 = r32824785 - r32824786;
double r32824788 = r32824781 * r32824787;
return r32824788;
}
double f(double re, double im) {
double r32824789 = 0.5;
double r32824790 = re;
double r32824791 = cos(r32824790);
double r32824792 = r32824789 * r32824791;
double r32824793 = im;
double r32824794 = -r32824793;
double r32824795 = exp(r32824794);
double r32824796 = exp(r32824793);
double r32824797 = r32824795 - r32824796;
double r32824798 = r32824792 * r32824797;
double r32824799 = 1.6380449607278358e-06;
bool r32824800 = r32824798 <= r32824799;
double r32824801 = -2.0;
double r32824802 = r32824801 * r32824789;
double r32824803 = r32824791 * r32824802;
double r32824804 = r32824803 * r32824793;
double r32824805 = 5.0;
double r32824806 = pow(r32824793, r32824805);
double r32824807 = 0.008333333333333333;
double r32824808 = 0.16666666666666666;
double r32824809 = r32824793 * r32824808;
double r32824810 = r32824793 * r32824793;
double r32824811 = r32824809 * r32824810;
double r32824812 = fma(r32824806, r32824807, r32824811);
double r32824813 = r32824791 * r32824812;
double r32824814 = r32824804 - r32824813;
double r32824815 = sqrt(r32824795);
double r32824816 = sqrt(r32824796);
double r32824817 = r32824815 + r32824816;
double r32824818 = r32824792 * r32824817;
double r32824819 = r32824815 - r32824816;
double r32824820 = r32824818 * r32824819;
double r32824821 = r32824800 ? r32824814 : r32824820;
return r32824821;
}




Bits error versus re




Bits error versus im
| Original | 57.9 |
|---|---|
| Target | 0.2 |
| Herbie | 0.5 |
if (* (* 0.5 (cos re)) (- (exp (- 0 im)) (exp im))) < 1.6380449607278358e-06Initial program 58.7
Taylor expanded around 0 0.4
Simplified0.5
rmApplied add-sqr-sqrt1.6
Applied prod-diff1.6
Applied distribute-rgt-in1.1
Simplified1.6
Taylor expanded around -inf 1.6
Simplified0.4
if 1.6380449607278358e-06 < (* (* 0.5 (cos re)) (- (exp (- 0 im)) (exp im))) Initial program 4.8
rmApplied add-sqr-sqrt5.3
Applied add-sqr-sqrt5.7
Applied difference-of-squares5.7
Applied associate-*r*5.7
Final simplification0.5
herbie shell --seed 2019107 +o rules:numerics
(FPCore (re im)
:name "math.sin on complex, imaginary part"
:herbie-target
(if (< (fabs im) 1) (- (* (cos re) (+ (+ im (* (* (* 1/6 im) im) im)) (* (* (* (* (* 1/120 im) im) im) im) im)))) (* (* 0.5 (cos re)) (- (exp (- 0 im)) (exp im))))
(* (* 0.5 (cos re)) (- (exp (- 0 im)) (exp im))))