Average Error: 0.1 → 0.1
Time: 1.8m
Precision: 64
\[\frac{e \cdot \sin v}{1 + e \cdot \cos v}\]
\[(e^{\log_* (1 + \frac{e}{(\left(\cos v\right) \cdot e + 1)_*} \cdot \sin v)} - 1)^*\]
double f(double e, double v) {
        double r3208612 = e;
        double r3208613 = v;
        double r3208614 = sin(r3208613);
        double r3208615 = r3208612 * r3208614;
        double r3208616 = 1.0;
        double r3208617 = cos(r3208613);
        double r3208618 = r3208612 * r3208617;
        double r3208619 = r3208616 + r3208618;
        double r3208620 = r3208615 / r3208619;
        return r3208620;
}

double f(double e, double v) {
        double r3208621 = e;
        double r3208622 = v;
        double r3208623 = cos(r3208622);
        double r3208624 = 1.0;
        double r3208625 = fma(r3208623, r3208621, r3208624);
        double r3208626 = r3208621 / r3208625;
        double r3208627 = sin(r3208622);
        double r3208628 = r3208626 * r3208627;
        double r3208629 = log1p(r3208628);
        double r3208630 = expm1(r3208629);
        return r3208630;
}

\frac{e \cdot \sin v}{1 + e \cdot \cos v}
(e^{\log_* (1 + \frac{e}{(\left(\cos v\right) \cdot e + 1)_*} \cdot \sin v)} - 1)^*

Error

Bits error versus e

Bits error versus v

Derivation

  1. Initial program 0.1

    \[\frac{e \cdot \sin v}{1 + e \cdot \cos v}\]
  2. Simplified0.1

    \[\leadsto \color{blue}{\frac{e}{(\left(\cos v\right) \cdot e + 1)_*} \cdot \sin v}\]
  3. Using strategy rm
  4. Applied expm1-log1p-u0.1

    \[\leadsto \color{blue}{(e^{\log_* (1 + \frac{e}{(\left(\cos v\right) \cdot e + 1)_*} \cdot \sin v)} - 1)^*}\]
  5. Final simplification0.1

    \[\leadsto (e^{\log_* (1 + \frac{e}{(\left(\cos v\right) \cdot e + 1)_*} \cdot \sin v)} - 1)^*\]

Reproduce

herbie shell --seed 2019102 +o rules:numerics
(FPCore (e v)
  :name "Trigonometry A"
  :pre (<= 0 e 1)
  (/ (* e (sin v)) (+ 1 (* e (cos v)))))