Average Error: 0.0 → 0.0
Time: 4.5s
Precision: 64
\[\left(0.5 \cdot \cos re\right) \cdot \left(e^{-im} + e^{im}\right)\]
\[\mathsf{fma}\left(0.5, e^{im}, \frac{0.5}{e^{im}}\right) \cdot \cos re\]
\left(0.5 \cdot \cos re\right) \cdot \left(e^{-im} + e^{im}\right)
\mathsf{fma}\left(0.5, e^{im}, \frac{0.5}{e^{im}}\right) \cdot \cos re
double f(double re, double im) {
        double r57693 = 0.5;
        double r57694 = re;
        double r57695 = cos(r57694);
        double r57696 = r57693 * r57695;
        double r57697 = im;
        double r57698 = -r57697;
        double r57699 = exp(r57698);
        double r57700 = exp(r57697);
        double r57701 = r57699 + r57700;
        double r57702 = r57696 * r57701;
        return r57702;
}

double f(double re, double im) {
        double r57703 = 0.5;
        double r57704 = im;
        double r57705 = exp(r57704);
        double r57706 = r57703 / r57705;
        double r57707 = fma(r57703, r57705, r57706);
        double r57708 = re;
        double r57709 = cos(r57708);
        double r57710 = r57707 * r57709;
        return r57710;
}

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}{\mathsf{fma}\left(0.5, e^{im}, \frac{0.5}{e^{im}}\right) \cdot \cos re}\]
  3. Final simplification0.0

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

Reproduce

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