Average Error: 43.5 → 0.4
Time: 1.2m
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 r2337629 = x;
        double r2337630 = exp(r2337629);
        double r2337631 = -r2337629;
        double r2337632 = exp(r2337631);
        double r2337633 = r2337630 + r2337632;
        double r2337634 = 2.0;
        double r2337635 = r2337633 / r2337634;
        double r2337636 = y;
        double r2337637 = cos(r2337636);
        double r2337638 = r2337635 * r2337637;
        double r2337639 = r2337630 - r2337632;
        double r2337640 = r2337639 / r2337634;
        double r2337641 = sin(r2337636);
        double r2337642 = r2337640 * r2337641;
        double r2337643 = /* ERROR: no complex support in C */;
        double r2337644 = /* ERROR: no complex support in C */;
        return r2337644;
}

double f(double x, double y) {
        double r2337645 = x;
        double r2337646 = -0.011756186125805182;
        bool r2337647 = r2337645 <= r2337646;
        double r2337648 = y;
        double r2337649 = cos(r2337648);
        double r2337650 = exp(r2337645);
        double r2337651 = -r2337645;
        double r2337652 = exp(r2337651);
        double r2337653 = r2337650 + r2337652;
        double r2337654 = 2.0;
        double r2337655 = r2337653 / r2337654;
        double r2337656 = r2337649 * r2337655;
        double r2337657 = r2337650 - r2337652;
        double r2337658 = r2337657 / r2337654;
        double r2337659 = sin(r2337648);
        double r2337660 = r2337658 * r2337659;
        double r2337661 = /* ERROR: no complex support in C */;
        double r2337662 = /* ERROR: no complex support in C */;
        double r2337663 = 5.0;
        double r2337664 = pow(r2337645, r2337663);
        double r2337665 = 0.016666666666666666;
        double r2337666 = 2.0;
        double r2337667 = 0.3333333333333333;
        double r2337668 = r2337645 * r2337645;
        double r2337669 = r2337667 * r2337668;
        double r2337670 = r2337666 + r2337669;
        double r2337671 = r2337670 * r2337645;
        double r2337672 = fma(r2337664, r2337665, r2337671);
        double r2337673 = r2337672 / r2337654;
        double r2337674 = r2337673 * r2337659;
        double r2337675 = /* ERROR: no complex support in C */;
        double r2337676 = /* ERROR: no complex support in C */;
        double r2337677 = r2337647 ? r2337662 : r2337676;
        return r2337677;
}

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