Average Error: 43.0 → 0.5
Time: 2.6m
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.014008388915516524:\\ \;\;\;\;\Im(\left(\frac{e^{x} + e^{-x}}{2} \cdot \cos y + \frac{(\frac{1}{60} \cdot \left({x}^{5}\right) + \left(x \cdot (\frac{1}{3} \cdot \left(x \cdot x\right) + 2)_*\right))_*}{2} \cdot \sin y i\right))\\ \mathbf{else}:\\ \;\;\;\;\Im(\left(\frac{e^{x} + e^{-x}}{2} \cdot \cos y + \frac{\frac{e^{x} \cdot e^{x} - e^{-x} \cdot e^{-x}}{e^{x} + e^{-x}}}{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.014008388915516524:\\
\;\;\;\;\Im(\left(\frac{e^{x} + e^{-x}}{2} \cdot \cos y + \frac{(\frac{1}{60} \cdot \left({x}^{5}\right) + \left(x \cdot (\frac{1}{3} \cdot \left(x \cdot x\right) + 2)_*\right))_*}{2} \cdot \sin y i\right))\\

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

\end{array}
double f(double x, double y) {
        double r7523161 = x;
        double r7523162 = exp(r7523161);
        double r7523163 = -r7523161;
        double r7523164 = exp(r7523163);
        double r7523165 = r7523162 + r7523164;
        double r7523166 = 2.0;
        double r7523167 = r7523165 / r7523166;
        double r7523168 = y;
        double r7523169 = cos(r7523168);
        double r7523170 = r7523167 * r7523169;
        double r7523171 = r7523162 - r7523164;
        double r7523172 = r7523171 / r7523166;
        double r7523173 = sin(r7523168);
        double r7523174 = r7523172 * r7523173;
        double r7523175 = /* ERROR: no complex support in C */;
        double r7523176 = /* ERROR: no complex support in C */;
        return r7523176;
}

double f(double x, double y) {
        double r7523177 = x;
        double r7523178 = 0.014008388915516524;
        bool r7523179 = r7523177 <= r7523178;
        double r7523180 = exp(r7523177);
        double r7523181 = -r7523177;
        double r7523182 = exp(r7523181);
        double r7523183 = r7523180 + r7523182;
        double r7523184 = 2.0;
        double r7523185 = r7523183 / r7523184;
        double r7523186 = y;
        double r7523187 = cos(r7523186);
        double r7523188 = r7523185 * r7523187;
        double r7523189 = 0.016666666666666666;
        double r7523190 = 5.0;
        double r7523191 = pow(r7523177, r7523190);
        double r7523192 = 0.3333333333333333;
        double r7523193 = r7523177 * r7523177;
        double r7523194 = fma(r7523192, r7523193, r7523184);
        double r7523195 = r7523177 * r7523194;
        double r7523196 = fma(r7523189, r7523191, r7523195);
        double r7523197 = r7523196 / r7523184;
        double r7523198 = sin(r7523186);
        double r7523199 = r7523197 * r7523198;
        double r7523200 = /* ERROR: no complex support in C */;
        double r7523201 = /* ERROR: no complex support in C */;
        double r7523202 = r7523180 * r7523180;
        double r7523203 = r7523182 * r7523182;
        double r7523204 = r7523202 - r7523203;
        double r7523205 = r7523204 / r7523183;
        double r7523206 = r7523205 / r7523184;
        double r7523207 = r7523206 * r7523198;
        double r7523208 = /* ERROR: no complex support in C */;
        double r7523209 = /* ERROR: no complex support in C */;
        double r7523210 = r7523179 ? r7523201 : r7523209;
        return r7523210;
}

Error

Bits error versus x

Bits error versus y

Derivation

  1. Split input into 2 regimes
  2. if x < 0.014008388915516524

    1. Initial program 43.5

      \[\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}{2 \cdot x + \left(\frac{1}{3} \cdot {x}^{3} + \frac{1}{60} \cdot {x}^{5}\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}{(\frac{1}{60} \cdot \left({x}^{5}\right) + \left(x \cdot (\frac{1}{3} \cdot \left(x \cdot x\right) + 2)_*\right))_*}}{2} \cdot \sin y i\right))\]

    if 0.014008388915516524 < x

    1. Initial program 2.3

      \[\Im(\left(\frac{e^{x} + e^{-x}}{2} \cdot \cos y + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\]
    2. Using strategy rm
    3. Applied flip--5.2

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

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

Reproduce

herbie shell --seed 2019112 +o rules:numerics
(FPCore (x y)
  :name "Euler formula imaginary part (p55)"
  (im (complex (* (/ (+ (exp x) (exp (- x))) 2) (cos y)) (* (/ (- (exp x) (exp (- x))) 2) (sin y)))))