Average Error: 0.0 → 0.0
Time: 30.0s
Precision: 64
\[\left(0.5 \cdot \sin re\right) \cdot \left(e^{0.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.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 r475734 = 0.5;
        double r475735 = re;
        double r475736 = sin(r475735);
        double r475737 = r475734 * r475736;
        double r475738 = 0.0;
        double r475739 = im;
        double r475740 = r475738 - r475739;
        double r475741 = exp(r475740);
        double r475742 = exp(r475739);
        double r475743 = r475741 + r475742;
        double r475744 = r475737 * r475743;
        return r475744;
}

double f(double re, double im) {
        double r475745 = 0.5;
        double r475746 = re;
        double r475747 = sin(r475746);
        double r475748 = im;
        double r475749 = exp(r475748);
        double r475750 = r475747 / r475749;
        double r475751 = fma(r475747, r475749, r475750);
        double r475752 = r475745 * r475751;
        return r475752;
}

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.0 - im} + e^{im}\right)\]
  2. Taylor expanded around inf 0.0

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

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

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

Reproduce

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