Average Error: 43.5 → 0.8
Time: 46.9s
Precision: 64
\[\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)\]
\[(\left((\left(im \cdot \frac{-1}{3}\right) \cdot im + -2)_*\right) \cdot im + \left({im}^{5} \cdot \frac{-1}{60}\right))_* \cdot \left(\sin re \cdot 0.5\right)\]
double f(double re, double im) {
        double r26870409 = 0.5;
        double r26870410 = re;
        double r26870411 = sin(r26870410);
        double r26870412 = r26870409 * r26870411;
        double r26870413 = im;
        double r26870414 = -r26870413;
        double r26870415 = exp(r26870414);
        double r26870416 = exp(r26870413);
        double r26870417 = r26870415 - r26870416;
        double r26870418 = r26870412 * r26870417;
        return r26870418;
}

double f(double re, double im) {
        double r26870419 = im;
        double r26870420 = -0.3333333333333333;
        double r26870421 = r26870419 * r26870420;
        double r26870422 = -2.0;
        double r26870423 = fma(r26870421, r26870419, r26870422);
        double r26870424 = 5.0;
        double r26870425 = pow(r26870419, r26870424);
        double r26870426 = -0.016666666666666666;
        double r26870427 = r26870425 * r26870426;
        double r26870428 = fma(r26870423, r26870419, r26870427);
        double r26870429 = re;
        double r26870430 = sin(r26870429);
        double r26870431 = 0.5;
        double r26870432 = r26870430 * r26870431;
        double r26870433 = r26870428 * r26870432;
        return r26870433;
}

\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)
(\left((\left(im \cdot \frac{-1}{3}\right) \cdot im + -2)_*\right) \cdot im + \left({im}^{5} \cdot \frac{-1}{60}\right))_* \cdot \left(\sin re \cdot 0.5\right)

Error

Bits error versus re

Bits error versus im

Target

Original43.5
Target0.3
Herbie0.8
\[\begin{array}{l} \mathbf{if}\;\left|im\right| \lt 1:\\ \;\;\;\;-\sin re \cdot \left(\left(im + \left(\left(\frac{1}{6} \cdot im\right) \cdot im\right) \cdot im\right) + \left(\left(\left(\left(\frac{1}{120} \cdot im\right) \cdot im\right) \cdot im\right) \cdot im\right) \cdot im\right)\\ \mathbf{else}:\\ \;\;\;\;\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)\\ \end{array}\]

Derivation

  1. Initial program 43.5

    \[\left(0.5 \cdot \sin re\right) \cdot \left(e^{-im} - e^{im}\right)\]
  2. Taylor expanded around 0 0.8

    \[\leadsto \left(0.5 \cdot \sin re\right) \cdot \color{blue}{\left(-\left(\frac{1}{3} \cdot {im}^{3} + \left(\frac{1}{60} \cdot {im}^{5} + 2 \cdot im\right)\right)\right)}\]
  3. Simplified0.8

    \[\leadsto \left(0.5 \cdot \sin re\right) \cdot \color{blue}{(\left({im}^{5}\right) \cdot \frac{-1}{60} + \left(im \cdot \left(\left(im \cdot \frac{-1}{3}\right) \cdot im - 2\right)\right))_*}\]
  4. Using strategy rm
  5. Applied pow10.8

    \[\leadsto \left(0.5 \cdot \sin re\right) \cdot \color{blue}{{\left((\left({im}^{5}\right) \cdot \frac{-1}{60} + \left(im \cdot \left(\left(im \cdot \frac{-1}{3}\right) \cdot im - 2\right)\right))_*\right)}^{1}}\]
  6. Applied pow10.8

    \[\leadsto \left(0.5 \cdot \color{blue}{{\left(\sin re\right)}^{1}}\right) \cdot {\left((\left({im}^{5}\right) \cdot \frac{-1}{60} + \left(im \cdot \left(\left(im \cdot \frac{-1}{3}\right) \cdot im - 2\right)\right))_*\right)}^{1}\]
  7. Applied pow10.8

    \[\leadsto \left(\color{blue}{{0.5}^{1}} \cdot {\left(\sin re\right)}^{1}\right) \cdot {\left((\left({im}^{5}\right) \cdot \frac{-1}{60} + \left(im \cdot \left(\left(im \cdot \frac{-1}{3}\right) \cdot im - 2\right)\right))_*\right)}^{1}\]
  8. Applied pow-prod-down0.8

    \[\leadsto \color{blue}{{\left(0.5 \cdot \sin re\right)}^{1}} \cdot {\left((\left({im}^{5}\right) \cdot \frac{-1}{60} + \left(im \cdot \left(\left(im \cdot \frac{-1}{3}\right) \cdot im - 2\right)\right))_*\right)}^{1}\]
  9. Applied pow-prod-down0.8

    \[\leadsto \color{blue}{{\left(\left(0.5 \cdot \sin re\right) \cdot (\left({im}^{5}\right) \cdot \frac{-1}{60} + \left(im \cdot \left(\left(im \cdot \frac{-1}{3}\right) \cdot im - 2\right)\right))_*\right)}^{1}}\]
  10. Simplified0.8

    \[\leadsto {\color{blue}{\left((\left((\left(im \cdot \frac{-1}{3}\right) \cdot im + -2)_*\right) \cdot im + \left(\frac{-1}{60} \cdot {im}^{5}\right))_* \cdot \left(0.5 \cdot \sin re\right)\right)}}^{1}\]
  11. Final simplification0.8

    \[\leadsto (\left((\left(im \cdot \frac{-1}{3}\right) \cdot im + -2)_*\right) \cdot im + \left({im}^{5} \cdot \frac{-1}{60}\right))_* \cdot \left(\sin re \cdot 0.5\right)\]

Reproduce

herbie shell --seed 2019101 +o rules:numerics
(FPCore (re im)
  :name "math.cos on complex, imaginary part"

  :herbie-target
  (if (< (fabs im) 1) (- (* (sin re) (+ (+ im (* (* (* 1/6 im) im) im)) (* (* (* (* (* 1/120 im) im) im) im) im)))) (* (* 0.5 (sin re)) (- (exp (- im)) (exp im))))

  (* (* 0.5 (sin re)) (- (exp (- im)) (exp im))))