Average Error: 0.0 → 0.2
Time: 16.4s
Precision: 64
\[\left(0.5 \cdot \sin re\right) \cdot \left(e^{0 - im} + e^{im}\right)\]
\[\mathsf{fma}\left(e^{im}, 0.5, \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(e^{im}, 0.5, \log \left(e^{\frac{0.5}{e^{im}}}\right)\right) \cdot \sin re
double f(double re, double im) {
        double r214626 = 0.5;
        double r214627 = re;
        double r214628 = sin(r214627);
        double r214629 = r214626 * r214628;
        double r214630 = 0.0;
        double r214631 = im;
        double r214632 = r214630 - r214631;
        double r214633 = exp(r214632);
        double r214634 = exp(r214631);
        double r214635 = r214633 + r214634;
        double r214636 = r214629 * r214635;
        return r214636;
}

double f(double re, double im) {
        double r214637 = im;
        double r214638 = exp(r214637);
        double r214639 = 0.5;
        double r214640 = r214639 / r214638;
        double r214641 = exp(r214640);
        double r214642 = log(r214641);
        double r214643 = fma(r214638, r214639, r214642);
        double r214644 = re;
        double r214645 = sin(r214644);
        double r214646 = r214643 * r214645;
        return r214646;
}

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(e^{im}, 0.5, \frac{0.5}{e^{im}}\right) \cdot \sin re}\]
  3. Using strategy rm
  4. Applied add-log-exp0.2

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

    \[\leadsto \mathsf{fma}\left(e^{im}, 0.5, \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))))