Average Error: 0.0 → 0.0
Time: 14.6s
Precision: 64
\[\left(0.5 \cdot \cos re\right) \cdot \left(e^{-im} + e^{im}\right)\]
\[\mathsf{fma}\left(\left(e^{im}\right), 0.5, \left(\frac{0.5}{e^{im}}\right)\right) \cdot \cos re\]
\left(0.5 \cdot \cos re\right) \cdot \left(e^{-im} + e^{im}\right)
\mathsf{fma}\left(\left(e^{im}\right), 0.5, \left(\frac{0.5}{e^{im}}\right)\right) \cdot \cos re
double f(double re, double im) {
        double r291502 = 0.5;
        double r291503 = re;
        double r291504 = cos(r291503);
        double r291505 = r291502 * r291504;
        double r291506 = im;
        double r291507 = -r291506;
        double r291508 = exp(r291507);
        double r291509 = exp(r291506);
        double r291510 = r291508 + r291509;
        double r291511 = r291505 * r291510;
        return r291511;
}

double f(double re, double im) {
        double r291512 = im;
        double r291513 = exp(r291512);
        double r291514 = 0.5;
        double r291515 = r291514 / r291513;
        double r291516 = fma(r291513, r291514, r291515);
        double r291517 = re;
        double r291518 = cos(r291517);
        double r291519 = r291516 * r291518;
        return r291519;
}

Error

Bits error versus re

Bits error versus im

Derivation

  1. Initial program 0.0

    \[\left(0.5 \cdot \cos re\right) \cdot \left(e^{-im} + e^{im}\right)\]
  2. Simplified0.0

    \[\leadsto \color{blue}{\cos re \cdot \mathsf{fma}\left(\left(e^{im}\right), 0.5, \left(\frac{0.5}{e^{im}}\right)\right)}\]
  3. Final simplification0.0

    \[\leadsto \mathsf{fma}\left(\left(e^{im}\right), 0.5, \left(\frac{0.5}{e^{im}}\right)\right) \cdot \cos re\]

Reproduce

herbie shell --seed 2019128 +o rules:numerics
(FPCore (re im)
  :name "math.cos on complex, real part"
  (* (* 0.5 (cos re)) (+ (exp (- im)) (exp im))))