Average Error: 0.0 → 0.3
Time: 5.8s
Precision: 64
\[\Re(\left(\frac{e^{x} + e^{-x}}{2} \cdot \cos y + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\]
\[\Re(\left(\mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{fma}\left(0.5, \cos y \cdot e^{x}, 0.5 \cdot \left(\cos y \cdot e^{-x}\right)\right)\right)\right) + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\]
\Re(\left(\frac{e^{x} + e^{-x}}{2} \cdot \cos y + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))
\Re(\left(\mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{fma}\left(0.5, \cos y \cdot e^{x}, 0.5 \cdot \left(\cos y \cdot e^{-x}\right)\right)\right)\right) + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))
double f(double x, double y) {
        double r38673 = x;
        double r38674 = exp(r38673);
        double r38675 = -r38673;
        double r38676 = exp(r38675);
        double r38677 = r38674 + r38676;
        double r38678 = 2.0;
        double r38679 = r38677 / r38678;
        double r38680 = y;
        double r38681 = cos(r38680);
        double r38682 = r38679 * r38681;
        double r38683 = r38674 - r38676;
        double r38684 = r38683 / r38678;
        double r38685 = sin(r38680);
        double r38686 = r38684 * r38685;
        double r38687 = /* ERROR: no complex support in C */;
        double r38688 = /* ERROR: no complex support in C */;
        return r38688;
}

double f(double x, double y) {
        double r38689 = 0.5;
        double r38690 = y;
        double r38691 = cos(r38690);
        double r38692 = x;
        double r38693 = exp(r38692);
        double r38694 = r38691 * r38693;
        double r38695 = -r38692;
        double r38696 = exp(r38695);
        double r38697 = r38691 * r38696;
        double r38698 = r38689 * r38697;
        double r38699 = fma(r38689, r38694, r38698);
        double r38700 = log1p(r38699);
        double r38701 = expm1(r38700);
        double r38702 = r38693 - r38696;
        double r38703 = 2.0;
        double r38704 = r38702 / r38703;
        double r38705 = sin(r38690);
        double r38706 = r38704 * r38705;
        double r38707 = /* ERROR: no complex support in C */;
        double r38708 = /* ERROR: no complex support in C */;
        return r38708;
}

Error

Bits error versus x

Bits error versus y

Derivation

  1. Initial program 0.0

    \[\Re(\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 expm1-log1p-u0.3

    \[\leadsto \Re(\left(\color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{e^{x} + e^{-x}}{2} \cdot \cos y\right)\right)} + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\]
  4. Taylor expanded around inf 0.7

    \[\leadsto \Re(\left(\mathsf{expm1}\left(\color{blue}{\log \left(0.5 \cdot \left(\cos y \cdot e^{x}\right) + \left(0.5 \cdot \left(\cos y \cdot e^{-x}\right) + 1\right)\right)}\right) + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\]
  5. Simplified0.3

    \[\leadsto \Re(\left(\mathsf{expm1}\left(\color{blue}{\mathsf{log1p}\left(\mathsf{fma}\left(0.5, \cos y \cdot e^{x}, 0.5 \cdot \left(\cos y \cdot e^{-x}\right)\right)\right)}\right) + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\]
  6. Final simplification0.3

    \[\leadsto \Re(\left(\mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{fma}\left(0.5, \cos y \cdot e^{x}, 0.5 \cdot \left(\cos y \cdot e^{-x}\right)\right)\right)\right) + \frac{e^{x} - e^{-x}}{2} \cdot \sin y i\right))\]

Reproduce

herbie shell --seed 2020057 +o rules:numerics
(FPCore (x y)
  :name "Euler formula real part (p55)"
  :precision binary64
  (re (complex (* (/ (+ (exp x) (exp (- x))) 2) (cos y)) (* (/ (- (exp x) (exp (- x))) 2) (sin y)))))