Average Error: 0.0 → 0.0
Time: 27.4s
Precision: 64
\[\left(0.5 \cdot \sin re\right) \cdot \left(e^{0 - im} + e^{im}\right)\]
\[0.5 \cdot \mathsf{fma}\left(\sin re, e^{im}, \frac{\sin re}{e^{im}}\right)\]
\left(0.5 \cdot \sin re\right) \cdot \left(e^{0 - im} + e^{im}\right)
0.5 \cdot \mathsf{fma}\left(\sin re, e^{im}, \frac{\sin re}{e^{im}}\right)
double f(double re, double im) {
        double r1116702 = 0.5;
        double r1116703 = re;
        double r1116704 = sin(r1116703);
        double r1116705 = r1116702 * r1116704;
        double r1116706 = 0.0;
        double r1116707 = im;
        double r1116708 = r1116706 - r1116707;
        double r1116709 = exp(r1116708);
        double r1116710 = exp(r1116707);
        double r1116711 = r1116709 + r1116710;
        double r1116712 = r1116705 * r1116711;
        return r1116712;
}

double f(double re, double im) {
        double r1116713 = 0.5;
        double r1116714 = re;
        double r1116715 = sin(r1116714);
        double r1116716 = im;
        double r1116717 = exp(r1116716);
        double r1116718 = r1116715 / r1116717;
        double r1116719 = fma(r1116715, r1116717, r1116718);
        double r1116720 = r1116713 * r1116719;
        return r1116720;
}

Error

Bits error versus re

Bits error versus im

Derivation

  1. Initial program 0.0

    \[\left(0.5 \cdot \sin re\right) \cdot \left(e^{0 - im} + e^{im}\right)\]
  2. Using strategy rm
  3. Applied associate-*l*0.0

    \[\leadsto \color{blue}{0.5 \cdot \left(\sin re \cdot \left(e^{0 - im} + e^{im}\right)\right)}\]
  4. Simplified0.0

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

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

Reproduce

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