Average Error: 57.9 → 0.5
Time: 1.4m
Precision: 64
\[\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}\]
\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;
}

Error

Bits error versus re

Bits error versus im

Target

Original57.9
Target0.2
Herbie0.5
\[\begin{array}{l} \mathbf{if}\;\left|im\right| \lt 1:\\ \;\;\;\;-\cos re \cdot \left(\left(im + \left(\left(\frac{1}{6} \cdot im\right) \cdot im\right) \cdot im\right) + \left(\left(\left(\left(\frac{1}{120} \cdot im\right) \cdot im\right) \cdot im\right) \cdot im\right) \cdot im\right)\\ \mathbf{else}:\\ \;\;\;\;\left(0.5 \cdot \cos re\right) \cdot \left(e^{0 - im} - e^{im}\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if (* (* 0.5 (cos re)) (- (exp (- 0 im)) (exp im))) < 1.6380449607278358e-06

    1. Initial program 58.7

      \[\left(0.5 \cdot \cos re\right) \cdot \left(e^{0 - im} - e^{im}\right)\]
    2. Taylor expanded around 0 0.4

      \[\leadsto \left(0.5 \cdot \cos re\right) \cdot \color{blue}{\left(-\left(\frac{1}{3} \cdot {im}^{3} + \left(\frac{1}{60} \cdot {im}^{5} + 2 \cdot im\right)\right)\right)}\]
    3. Simplified0.5

      \[\leadsto \left(0.5 \cdot \cos re\right) \cdot \color{blue}{\mathsf{fma}\left(\left({im}^{5}\right), \frac{-1}{60}, \left(im \cdot \left(\left(im \cdot \frac{-1}{3}\right) \cdot im - 2\right)\right)\right)}\]
    4. Using strategy rm
    5. Applied add-sqr-sqrt1.6

      \[\leadsto \left(0.5 \cdot \cos re\right) \cdot \mathsf{fma}\left(\left({im}^{5}\right), \frac{-1}{60}, \left(im \cdot \left(\left(im \cdot \frac{-1}{3}\right) \cdot im - \color{blue}{\sqrt{2} \cdot \sqrt{2}}\right)\right)\right)\]
    6. Applied prod-diff1.6

      \[\leadsto \left(0.5 \cdot \cos re\right) \cdot \mathsf{fma}\left(\left({im}^{5}\right), \frac{-1}{60}, \left(im \cdot \color{blue}{\left(\mathsf{fma}\left(\left(im \cdot \frac{-1}{3}\right), im, \left(-\sqrt{2} \cdot \sqrt{2}\right)\right) + \mathsf{fma}\left(\left(-\sqrt{2}\right), \left(\sqrt{2}\right), \left(\sqrt{2} \cdot \sqrt{2}\right)\right)\right)}\right)\right)\]
    7. Applied distribute-rgt-in1.1

      \[\leadsto \left(0.5 \cdot \cos re\right) \cdot \mathsf{fma}\left(\left({im}^{5}\right), \frac{-1}{60}, \color{blue}{\left(\mathsf{fma}\left(\left(im \cdot \frac{-1}{3}\right), im, \left(-\sqrt{2} \cdot \sqrt{2}\right)\right) \cdot im + \mathsf{fma}\left(\left(-\sqrt{2}\right), \left(\sqrt{2}\right), \left(\sqrt{2} \cdot \sqrt{2}\right)\right) \cdot im\right)}\right)\]
    8. Simplified1.6

      \[\leadsto \left(0.5 \cdot \cos re\right) \cdot \mathsf{fma}\left(\left({im}^{5}\right), \frac{-1}{60}, \left(\mathsf{fma}\left(\left(im \cdot \frac{-1}{3}\right), im, \left(-\sqrt{2} \cdot \sqrt{2}\right)\right) \cdot im + \color{blue}{0}\right)\right)\]
    9. Taylor expanded around -inf 1.6

      \[\leadsto \color{blue}{-\left(0.5 \cdot \left({\left(\sqrt{2}\right)}^{2} \cdot \left(im \cdot \cos re\right)\right) + \left(0.16666666666666666 \cdot \left({im}^{3} \cdot \cos re\right) + 0.008333333333333333 \cdot \left({im}^{5} \cdot \cos re\right)\right)\right)}\]
    10. Simplified0.4

      \[\leadsto \color{blue}{\left(\left(-2 \cdot 0.5\right) \cdot \cos re\right) \cdot im - \mathsf{fma}\left(\left({im}^{5}\right), 0.008333333333333333, \left(\left(im \cdot 0.16666666666666666\right) \cdot \left(im \cdot im\right)\right)\right) \cdot \cos re}\]

    if 1.6380449607278358e-06 < (* (* 0.5 (cos re)) (- (exp (- 0 im)) (exp im)))

    1. Initial program 4.8

      \[\left(0.5 \cdot \cos re\right) \cdot \left(e^{0 - im} - e^{im}\right)\]
    2. Using strategy rm
    3. Applied add-sqr-sqrt5.3

      \[\leadsto \left(0.5 \cdot \cos re\right) \cdot \left(e^{0 - im} - \color{blue}{\sqrt{e^{im}} \cdot \sqrt{e^{im}}}\right)\]
    4. Applied add-sqr-sqrt5.7

      \[\leadsto \left(0.5 \cdot \cos re\right) \cdot \left(\color{blue}{\sqrt{e^{0 - im}} \cdot \sqrt{e^{0 - im}}} - \sqrt{e^{im}} \cdot \sqrt{e^{im}}\right)\]
    5. Applied difference-of-squares5.7

      \[\leadsto \left(0.5 \cdot \cos re\right) \cdot \color{blue}{\left(\left(\sqrt{e^{0 - im}} + \sqrt{e^{im}}\right) \cdot \left(\sqrt{e^{0 - im}} - \sqrt{e^{im}}\right)\right)}\]
    6. Applied associate-*r*5.7

      \[\leadsto \color{blue}{\left(\left(0.5 \cdot \cos re\right) \cdot \left(\sqrt{e^{0 - im}} + \sqrt{e^{im}}\right)\right) \cdot \left(\sqrt{e^{0 - im}} - \sqrt{e^{im}}\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.5

    \[\leadsto \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}\]

Reproduce

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))))