Average Error: 42.9 → 0.4
Time: 17.8s
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.015295351353249335:\\ \;\;\;\;\frac{e^{x} - e^{-x}}{2} \cdot \sin y\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{1}{3} \cdot {x}^{3} + \left(\frac{1}{60} \cdot {x}^{5} + 2 \cdot x\right)}{2} \cdot \sin y\\ \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.015295351353249335:\\
\;\;\;\;\frac{e^{x} - e^{-x}}{2} \cdot \sin y\\

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

\end{array}
double f(double x, double y) {
        double r42485 = x;
        double r42486 = exp(r42485);
        double r42487 = -r42485;
        double r42488 = exp(r42487);
        double r42489 = r42486 + r42488;
        double r42490 = 2.0;
        double r42491 = r42489 / r42490;
        double r42492 = y;
        double r42493 = cos(r42492);
        double r42494 = r42491 * r42493;
        double r42495 = r42486 - r42488;
        double r42496 = r42495 / r42490;
        double r42497 = sin(r42492);
        double r42498 = r42496 * r42497;
        double r42499 = /* ERROR: no complex support in C */;
        double r42500 = /* ERROR: no complex support in C */;
        return r42500;
}

double f(double x, double y) {
        double r42501 = x;
        double r42502 = -0.015295351353249335;
        bool r42503 = r42501 <= r42502;
        double r42504 = exp(r42501);
        double r42505 = -r42501;
        double r42506 = exp(r42505);
        double r42507 = r42504 - r42506;
        double r42508 = 2.0;
        double r42509 = r42507 / r42508;
        double r42510 = y;
        double r42511 = sin(r42510);
        double r42512 = r42509 * r42511;
        double r42513 = 0.3333333333333333;
        double r42514 = 3.0;
        double r42515 = pow(r42501, r42514);
        double r42516 = r42513 * r42515;
        double r42517 = 0.016666666666666666;
        double r42518 = 5.0;
        double r42519 = pow(r42501, r42518);
        double r42520 = r42517 * r42519;
        double r42521 = 2.0;
        double r42522 = r42521 * r42501;
        double r42523 = r42520 + r42522;
        double r42524 = r42516 + r42523;
        double r42525 = r42524 / r42508;
        double r42526 = r42525 * r42511;
        double r42527 = r42503 ? r42512 : r42526;
        return r42527;
}

Error

Bits error versus x

Bits error versus y

Derivation

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

    1. Initial program 1.6

      \[\Im(\left(\frac{e^{x} + e^{-x}}{2} \cdot \cos y + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\]
    2. Simplified1.6

      \[\leadsto \color{blue}{\frac{e^{x} - e^{-x}}{2} \cdot \sin y}\]

    if -0.015295351353249335 < x

    1. Initial program 43.2

      \[\Im(\left(\frac{e^{x} + e^{-x}}{2} \cdot \cos y + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\]
    2. Simplified43.2

      \[\leadsto \color{blue}{\frac{e^{x} - e^{-x}}{2} \cdot \sin y}\]
    3. Taylor expanded around 0 0.4

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

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

Reproduce

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