Average Error: 43.7 → 0.5
Time: 30.3s
Precision: 64
\[\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)\]
\[\begin{array}{l} \mathbf{if}\;e^{-im} - e^{im} \le -0.1633153397779747439955144727719016373158:\\ \;\;\;\;\left(0.5 \cdot \sin re\right) \cdot \frac{\left(-e^{im + im}\right) + {\left(e^{-1}\right)}^{\left(2 \cdot im\right)}}{e^{-im} + e^{im}}\\ \mathbf{else}:\\ \;\;\;\;\left(0.5 \cdot \sin re\right) \cdot \left(-\left(\frac{1}{3} \cdot {im}^{3} + \left(\frac{1}{60} \cdot {im}^{5} + 2 \cdot im\right)\right)\right)\\ \end{array}\]
\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)
\begin{array}{l}
\mathbf{if}\;e^{-im} - e^{im} \le -0.1633153397779747439955144727719016373158:\\
\;\;\;\;\left(0.5 \cdot \sin re\right) \cdot \frac{\left(-e^{im + im}\right) + {\left(e^{-1}\right)}^{\left(2 \cdot im\right)}}{e^{-im} + e^{im}}\\

\mathbf{else}:\\
\;\;\;\;\left(0.5 \cdot \sin re\right) \cdot \left(-\left(\frac{1}{3} \cdot {im}^{3} + \left(\frac{1}{60} \cdot {im}^{5} + 2 \cdot im\right)\right)\right)\\

\end{array}
double f(double re, double im) {
        double r168708 = 0.5;
        double r168709 = re;
        double r168710 = sin(r168709);
        double r168711 = r168708 * r168710;
        double r168712 = im;
        double r168713 = -r168712;
        double r168714 = exp(r168713);
        double r168715 = exp(r168712);
        double r168716 = r168714 - r168715;
        double r168717 = r168711 * r168716;
        return r168717;
}

double f(double re, double im) {
        double r168718 = im;
        double r168719 = -r168718;
        double r168720 = exp(r168719);
        double r168721 = exp(r168718);
        double r168722 = r168720 - r168721;
        double r168723 = -0.16331533977797474;
        bool r168724 = r168722 <= r168723;
        double r168725 = 0.5;
        double r168726 = re;
        double r168727 = sin(r168726);
        double r168728 = r168725 * r168727;
        double r168729 = r168718 + r168718;
        double r168730 = exp(r168729);
        double r168731 = -r168730;
        double r168732 = -1.0;
        double r168733 = exp(r168732);
        double r168734 = 2.0;
        double r168735 = r168734 * r168718;
        double r168736 = pow(r168733, r168735);
        double r168737 = r168731 + r168736;
        double r168738 = r168720 + r168721;
        double r168739 = r168737 / r168738;
        double r168740 = r168728 * r168739;
        double r168741 = 0.3333333333333333;
        double r168742 = 3.0;
        double r168743 = pow(r168718, r168742);
        double r168744 = r168741 * r168743;
        double r168745 = 0.016666666666666666;
        double r168746 = 5.0;
        double r168747 = pow(r168718, r168746);
        double r168748 = r168745 * r168747;
        double r168749 = r168748 + r168735;
        double r168750 = r168744 + r168749;
        double r168751 = -r168750;
        double r168752 = r168728 * r168751;
        double r168753 = r168724 ? r168740 : r168752;
        return r168753;
}

Error

Bits error versus re

Bits error versus im

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original43.7
Target0.3
Herbie0.5
\[\begin{array}{l} \mathbf{if}\;\left|im\right| \lt 1:\\ \;\;\;\;-\sin re \cdot \left(\left(im + \left(\left(0.1666666666666666574148081281236954964697 \cdot im\right) \cdot im\right) \cdot im\right) + \left(\left(\left(\left(0.008333333333333333217685101601546193705872 \cdot im\right) \cdot im\right) \cdot im\right) \cdot im\right) \cdot im\right)\\ \mathbf{else}:\\ \;\;\;\;\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if (- (exp (- im)) (exp im)) < -0.16331533977797474

    1. Initial program 1.6

      \[\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)\]
    2. Using strategy rm
    3. Applied flip--5.3

      \[\leadsto \left(0.5 \cdot \sin re\right) \cdot \color{blue}{\frac{e^{-im} \cdot e^{-im} - e^{im} \cdot e^{im}}{e^{-im} + e^{im}}}\]
    4. Simplified5.2

      \[\leadsto \left(0.5 \cdot \sin re\right) \cdot \frac{\color{blue}{\left(-e^{im + im}\right) + {\left(e^{-1}\right)}^{\left(2 \cdot im\right)}}}{e^{-im} + e^{im}}\]

    if -0.16331533977797474 < (- (exp (- im)) (exp im))

    1. Initial program 44.0

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

      \[\leadsto \left(0.5 \cdot \sin 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. Recombined 2 regimes into one program.
  4. Final simplification0.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;e^{-im} - e^{im} \le -0.1633153397779747439955144727719016373158:\\ \;\;\;\;\left(0.5 \cdot \sin re\right) \cdot \frac{\left(-e^{im + im}\right) + {\left(e^{-1}\right)}^{\left(2 \cdot im\right)}}{e^{-im} + e^{im}}\\ \mathbf{else}:\\ \;\;\;\;\left(0.5 \cdot \sin re\right) \cdot \left(-\left(\frac{1}{3} \cdot {im}^{3} + \left(\frac{1}{60} \cdot {im}^{5} + 2 \cdot im\right)\right)\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019291 
(FPCore (re im)
  :name "math.cos on complex, imaginary part"
  :precision binary64

  :herbie-target
  (if (< (fabs im) 1) (- (* (sin re) (+ (+ im (* (* (* 0.166666666666666657 im) im) im)) (* (* (* (* (* 0.00833333333333333322 im) im) im) im) im)))) (* (* 0.5 (sin re)) (- (exp (- im)) (exp im))))

  (* (* 0.5 (sin re)) (- (exp (- im)) (exp im))))