Average Error: 0.0 → 0.0
Time: 26.9s
Precision: 64
\[\left(0.5 \cdot \sin re\right) \cdot \left(e^{0.0 - im} + e^{im}\right)\]
\[0.5 \cdot \mathsf{fma}\left(e^{im}, \sin re, \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(e^{im}, \sin re, \frac{\sin re}{e^{im}}\right)
double f(double re, double im) {
        double r2052497 = 0.5;
        double r2052498 = re;
        double r2052499 = sin(r2052498);
        double r2052500 = r2052497 * r2052499;
        double r2052501 = 0.0;
        double r2052502 = im;
        double r2052503 = r2052501 - r2052502;
        double r2052504 = exp(r2052503);
        double r2052505 = exp(r2052502);
        double r2052506 = r2052504 + r2052505;
        double r2052507 = r2052500 * r2052506;
        return r2052507;
}

double f(double re, double im) {
        double r2052508 = 0.5;
        double r2052509 = im;
        double r2052510 = exp(r2052509);
        double r2052511 = re;
        double r2052512 = sin(r2052511);
        double r2052513 = r2052512 / r2052510;
        double r2052514 = fma(r2052510, r2052512, r2052513);
        double r2052515 = r2052508 * r2052514;
        return r2052515;
}

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(e^{im}, \sin re, \frac{\sin re}{e^{im}}\right)}\]
  4. Final simplification0.0

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

Reproduce

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