Average Error: 0.0 → 0.3
Time: 19.4s
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(\frac{\cos y \cdot \left(e^{x} + e^{-x}\right)}{2}\right)\right) + \sin y \cdot \frac{e^{x} - e^{-x}}{2} 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(\frac{\cos y \cdot \left(e^{x} + e^{-x}\right)}{2}\right)\right) + \sin y \cdot \frac{e^{x} - e^{-x}}{2} i\right))
double f(double x, double y) {
        double r45545 = x;
        double r45546 = exp(r45545);
        double r45547 = -r45545;
        double r45548 = exp(r45547);
        double r45549 = r45546 + r45548;
        double r45550 = 2.0;
        double r45551 = r45549 / r45550;
        double r45552 = y;
        double r45553 = cos(r45552);
        double r45554 = r45551 * r45553;
        double r45555 = r45546 - r45548;
        double r45556 = r45555 / r45550;
        double r45557 = sin(r45552);
        double r45558 = r45556 * r45557;
        double r45559 = /* ERROR: no complex support in C */;
        double r45560 = /* ERROR: no complex support in C */;
        return r45560;
}

double f(double x, double y) {
        double r45561 = y;
        double r45562 = cos(r45561);
        double r45563 = x;
        double r45564 = exp(r45563);
        double r45565 = -r45563;
        double r45566 = exp(r45565);
        double r45567 = r45564 + r45566;
        double r45568 = r45562 * r45567;
        double r45569 = 2.0;
        double r45570 = r45568 / r45569;
        double r45571 = log1p(r45570);
        double r45572 = expm1(r45571);
        double r45573 = sin(r45561);
        double r45574 = r45564 - r45566;
        double r45575 = r45574 / r45569;
        double r45576 = r45573 * r45575;
        double r45577 = /* ERROR: no complex support in C */;
        double r45578 = /* ERROR: no complex support in C */;
        return r45578;
}

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. Simplified0.3

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

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

Reproduce

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