Average Error: 43.5 → 0.4
Time: 3.7m
Precision: 64
\[\Im(\left(\frac{e^{x} + e^{-x}}{2} \cdot \cos y + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\]
\[\begin{array}{l} \mathbf{if}\;x \le -0.01175618612580518231036652565535405301489:\\ \;\;\;\;\Im(\left(\left(\left(e^{-x} + e^{x}\right) \cdot \cos y\right) \cdot 0.5 + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\\ \mathbf{else}:\\ \;\;\;\;\Im(\left(\cos y \cdot \frac{e^{-x} + e^{x}}{2} + \sin y \cdot \frac{\left(2 + \frac{1}{3} \cdot \left(x \cdot x\right)\right) \cdot x + \frac{1}{60} \cdot {x}^{5}}{2} i\right))\\ \end{array}\]
\Im(\left(\frac{e^{x} + e^{-x}}{2} \cdot \cos y + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))
\begin{array}{l}
\mathbf{if}\;x \le -0.01175618612580518231036652565535405301489:\\
\;\;\;\;\Im(\left(\left(\left(e^{-x} + e^{x}\right) \cdot \cos y\right) \cdot 0.5 + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\\

\mathbf{else}:\\
\;\;\;\;\Im(\left(\cos y \cdot \frac{e^{-x} + e^{x}}{2} + \sin y \cdot \frac{\left(2 + \frac{1}{3} \cdot \left(x \cdot x\right)\right) \cdot x + \frac{1}{60} \cdot {x}^{5}}{2} i\right))\\

\end{array}
double f(double x, double y) {
        double r2402022 = x;
        double r2402023 = exp(r2402022);
        double r2402024 = -r2402022;
        double r2402025 = exp(r2402024);
        double r2402026 = r2402023 + r2402025;
        double r2402027 = 2.0;
        double r2402028 = r2402026 / r2402027;
        double r2402029 = y;
        double r2402030 = cos(r2402029);
        double r2402031 = r2402028 * r2402030;
        double r2402032 = r2402023 - r2402025;
        double r2402033 = r2402032 / r2402027;
        double r2402034 = sin(r2402029);
        double r2402035 = r2402033 * r2402034;
        double r2402036 = /* ERROR: no complex support in C */;
        double r2402037 = /* ERROR: no complex support in C */;
        return r2402037;
}

double f(double x, double y) {
        double r2402038 = x;
        double r2402039 = -0.011756186125805182;
        bool r2402040 = r2402038 <= r2402039;
        double r2402041 = -r2402038;
        double r2402042 = exp(r2402041);
        double r2402043 = exp(r2402038);
        double r2402044 = r2402042 + r2402043;
        double r2402045 = y;
        double r2402046 = cos(r2402045);
        double r2402047 = r2402044 * r2402046;
        double r2402048 = 0.5;
        double r2402049 = r2402047 * r2402048;
        double r2402050 = r2402043 - r2402042;
        double r2402051 = 2.0;
        double r2402052 = r2402050 / r2402051;
        double r2402053 = sin(r2402045);
        double r2402054 = r2402052 * r2402053;
        double r2402055 = /* ERROR: no complex support in C */;
        double r2402056 = /* ERROR: no complex support in C */;
        double r2402057 = r2402044 / r2402051;
        double r2402058 = r2402046 * r2402057;
        double r2402059 = 2.0;
        double r2402060 = 0.3333333333333333;
        double r2402061 = r2402038 * r2402038;
        double r2402062 = r2402060 * r2402061;
        double r2402063 = r2402059 + r2402062;
        double r2402064 = r2402063 * r2402038;
        double r2402065 = 0.016666666666666666;
        double r2402066 = 5.0;
        double r2402067 = pow(r2402038, r2402066);
        double r2402068 = r2402065 * r2402067;
        double r2402069 = r2402064 + r2402068;
        double r2402070 = r2402069 / r2402051;
        double r2402071 = r2402053 * r2402070;
        double r2402072 = /* ERROR: no complex support in C */;
        double r2402073 = /* ERROR: no complex support in C */;
        double r2402074 = r2402040 ? r2402056 : r2402073;
        return r2402074;
}

Error

Bits error versus x

Bits error versus y

Derivation

  1. Split input into 2 regimes
  2. if x < -0.011756186125805182

    1. Initial program 3.0

      \[\Im(\left(\frac{e^{x} + e^{-x}}{2} \cdot \cos y + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\]
    2. Taylor expanded around inf 3.0

      \[\leadsto \Im(\left(\color{blue}{0.5 \cdot \left(\left(e^{x} + e^{-x}\right) \cdot \cos y\right)} + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\]

    if -0.011756186125805182 < x

    1. Initial program 43.8

      \[\Im(\left(\frac{e^{x} + e^{-x}}{2} \cdot \cos y + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\]
    2. Taylor expanded around 0 0.4

      \[\leadsto \Im(\left(\frac{e^{x} + e^{-x}}{2} \cdot \cos y + \frac{\color{blue}{\frac{1}{3} \cdot {x}^{3} + \left(\frac{1}{60} \cdot {x}^{5} + 2 \cdot x\right)}}{2} \cdot \sin y i\right))\]
    3. Simplified0.4

      \[\leadsto \Im(\left(\frac{e^{x} + e^{-x}}{2} \cdot \cos y + \frac{\color{blue}{x \cdot \left(\left(x \cdot x\right) \cdot \frac{1}{3} + 2\right) + \frac{1}{60} \cdot {x}^{5}}}{2} \cdot \sin y i\right))\]
  3. Recombined 2 regimes into one program.
  4. Final simplification0.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -0.01175618612580518231036652565535405301489:\\ \;\;\;\;\Im(\left(\left(\left(e^{-x} + e^{x}\right) \cdot \cos y\right) \cdot 0.5 + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\\ \mathbf{else}:\\ \;\;\;\;\Im(\left(\cos y \cdot \frac{e^{-x} + e^{x}}{2} + \sin y \cdot \frac{\left(2 + \frac{1}{3} \cdot \left(x \cdot x\right)\right) \cdot x + \frac{1}{60} \cdot {x}^{5}}{2} i\right))\\ \end{array}\]

Reproduce

herbie shell --seed 2019200 
(FPCore (x y)
  :name "Euler formula imaginary part (p55)"
  (im (complex (* (/ (+ (exp x) (exp (- x))) 2.0) (cos y)) (* (/ (- (exp x) (exp (- x))) 2.0) (sin y)))))