Average Error: 0.0 → 0.0
Time: 3.4s
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 r115981 = 0.5;
        double r115982 = re;
        double r115983 = cos(r115982);
        double r115984 = r115981 * r115983;
        double r115985 = im;
        double r115986 = -r115985;
        double r115987 = exp(r115986);
        double r115988 = exp(r115985);
        double r115989 = r115987 + r115988;
        double r115990 = r115984 * r115989;
        return r115990;
}

double f(double re, double im) {
        double r115991 = 0.5;
        double r115992 = im;
        double r115993 = exp(r115992);
        double r115994 = r115991 / r115993;
        double r115995 = fma(r115991, r115993, r115994);
        double r115996 = re;
        double r115997 = cos(r115996);
        double r115998 = r115995 * r115997;
        return r115998;
}

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 2020024 +o rules:numerics
(FPCore (re im)
  :name "math.cos on complex, real part"
  :precision binary64
  (* (* 0.5 (cos re)) (+ (exp (- im)) (exp im))))