Average Error: 0.0 → 0.0
Time: 20.8s
Precision: 64
\[\left(0.5 \cdot \cos re\right) \cdot \left(e^{-im} + e^{im}\right)\]
\[0.5 \cdot \mathsf{fma}\left(e^{im}, \cos re, \frac{\cos re}{e^{im}}\right)\]
\left(0.5 \cdot \cos re\right) \cdot \left(e^{-im} + e^{im}\right)
0.5 \cdot \mathsf{fma}\left(e^{im}, \cos re, \frac{\cos re}{e^{im}}\right)
double f(double re, double im) {
        double r868868 = 0.5;
        double r868869 = re;
        double r868870 = cos(r868869);
        double r868871 = r868868 * r868870;
        double r868872 = im;
        double r868873 = -r868872;
        double r868874 = exp(r868873);
        double r868875 = exp(r868872);
        double r868876 = r868874 + r868875;
        double r868877 = r868871 * r868876;
        return r868877;
}

double f(double re, double im) {
        double r868878 = 0.5;
        double r868879 = im;
        double r868880 = exp(r868879);
        double r868881 = re;
        double r868882 = cos(r868881);
        double r868883 = r868882 / r868880;
        double r868884 = fma(r868880, r868882, r868883);
        double r868885 = r868878 * r868884;
        return r868885;
}

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

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

Reproduce

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