Average Error: 0.0 → 0.2
Time: 27.8s
Precision: 64
\[\left(0.5 \cdot \sin re\right) \cdot \left(e^{0 - im} + e^{im}\right)\]
\[\mathsf{fma}\left(0.5, e^{im}, \log \left(e^{\frac{0.5}{e^{im}}}\right)\right) \cdot \sin re\]
\left(0.5 \cdot \sin re\right) \cdot \left(e^{0 - im} + e^{im}\right)
\mathsf{fma}\left(0.5, e^{im}, \log \left(e^{\frac{0.5}{e^{im}}}\right)\right) \cdot \sin re
double f(double re, double im) {
        double r584617 = 0.5;
        double r584618 = re;
        double r584619 = sin(r584618);
        double r584620 = r584617 * r584619;
        double r584621 = 0.0;
        double r584622 = im;
        double r584623 = r584621 - r584622;
        double r584624 = exp(r584623);
        double r584625 = exp(r584622);
        double r584626 = r584624 + r584625;
        double r584627 = r584620 * r584626;
        return r584627;
}

double f(double re, double im) {
        double r584628 = 0.5;
        double r584629 = im;
        double r584630 = exp(r584629);
        double r584631 = r584628 / r584630;
        double r584632 = exp(r584631);
        double r584633 = log(r584632);
        double r584634 = fma(r584628, r584630, r584633);
        double r584635 = re;
        double r584636 = sin(r584635);
        double r584637 = r584634 * r584636;
        return r584637;
}

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. Simplified0.0

    \[\leadsto \color{blue}{\mathsf{fma}\left(0.5, e^{im}, \frac{0.5}{e^{im}}\right) \cdot \sin re}\]
  3. Using strategy rm
  4. Applied add-log-exp0.2

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

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

Reproduce

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