Average Error: 43.5 → 0.4
Time: 2.4m
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(\cos y \cdot \frac{e^{x} + e^{-x}}{2} + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\\ \mathbf{else}:\\ \;\;\;\;\Im(\left(\cos y \cdot \frac{e^{x} + e^{-x}}{2} + \frac{\mathsf{fma}\left({x}^{5}, \frac{1}{60}, \left(2 + \frac{1}{3} \cdot \left(x \cdot x\right)\right) \cdot x\right)}{2} \cdot \sin y 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(\cos y \cdot \frac{e^{x} + e^{-x}}{2} + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\\

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

\end{array}
double f(double x, double y) {
        double r2337359 = x;
        double r2337360 = exp(r2337359);
        double r2337361 = -r2337359;
        double r2337362 = exp(r2337361);
        double r2337363 = r2337360 + r2337362;
        double r2337364 = 2.0;
        double r2337365 = r2337363 / r2337364;
        double r2337366 = y;
        double r2337367 = cos(r2337366);
        double r2337368 = r2337365 * r2337367;
        double r2337369 = r2337360 - r2337362;
        double r2337370 = r2337369 / r2337364;
        double r2337371 = sin(r2337366);
        double r2337372 = r2337370 * r2337371;
        double r2337373 = /* ERROR: no complex support in C */;
        double r2337374 = /* ERROR: no complex support in C */;
        return r2337374;
}

double f(double x, double y) {
        double r2337375 = x;
        double r2337376 = -0.011756186125805182;
        bool r2337377 = r2337375 <= r2337376;
        double r2337378 = y;
        double r2337379 = cos(r2337378);
        double r2337380 = exp(r2337375);
        double r2337381 = -r2337375;
        double r2337382 = exp(r2337381);
        double r2337383 = r2337380 + r2337382;
        double r2337384 = 2.0;
        double r2337385 = r2337383 / r2337384;
        double r2337386 = r2337379 * r2337385;
        double r2337387 = r2337380 - r2337382;
        double r2337388 = r2337387 / r2337384;
        double r2337389 = sin(r2337378);
        double r2337390 = r2337388 * r2337389;
        double r2337391 = /* ERROR: no complex support in C */;
        double r2337392 = /* ERROR: no complex support in C */;
        double r2337393 = 5.0;
        double r2337394 = pow(r2337375, r2337393);
        double r2337395 = 0.016666666666666666;
        double r2337396 = 2.0;
        double r2337397 = 0.3333333333333333;
        double r2337398 = r2337375 * r2337375;
        double r2337399 = r2337397 * r2337398;
        double r2337400 = r2337396 + r2337399;
        double r2337401 = r2337400 * r2337375;
        double r2337402 = fma(r2337394, r2337395, r2337401);
        double r2337403 = r2337402 / r2337384;
        double r2337404 = r2337403 * r2337389;
        double r2337405 = /* ERROR: no complex support in C */;
        double r2337406 = /* ERROR: no complex support in C */;
        double r2337407 = r2337377 ? r2337392 : r2337406;
        return r2337407;
}

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

    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}{\mathsf{fma}\left({x}^{5}, \frac{1}{60}, x \cdot \left(2 + \frac{1}{3} \cdot \left(x \cdot x\right)\right)\right)}}{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(\cos y \cdot \frac{e^{x} + e^{-x}}{2} + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\\ \mathbf{else}:\\ \;\;\;\;\Im(\left(\cos y \cdot \frac{e^{x} + e^{-x}}{2} + \frac{\mathsf{fma}\left({x}^{5}, \frac{1}{60}, \left(2 + \frac{1}{3} \cdot \left(x \cdot x\right)\right) \cdot x\right)}{2} \cdot \sin y i\right))\\ \end{array}\]

Reproduce

herbie shell --seed 2019200 +o rules:numerics
(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)))))