Average Error: 0.1 → 0.3
Time: 4.7s
Precision: 64
\[0.0 \le e \le 1\]
\[\frac{e \cdot \sin v}{1 + e \cdot \cos v}\]
\[\frac{\sin v}{\frac{\mathsf{fma}\left(\cos v, e, 1\right)}{e}}\]
\frac{e \cdot \sin v}{1 + e \cdot \cos v}
\frac{\sin v}{\frac{\mathsf{fma}\left(\cos v, e, 1\right)}{e}}
double f(double e, double v) {
        double r10690 = e;
        double r10691 = v;
        double r10692 = sin(r10691);
        double r10693 = r10690 * r10692;
        double r10694 = 1.0;
        double r10695 = cos(r10691);
        double r10696 = r10690 * r10695;
        double r10697 = r10694 + r10696;
        double r10698 = r10693 / r10697;
        return r10698;
}

double f(double e, double v) {
        double r10699 = v;
        double r10700 = sin(r10699);
        double r10701 = cos(r10699);
        double r10702 = e;
        double r10703 = 1.0;
        double r10704 = fma(r10701, r10702, r10703);
        double r10705 = r10704 / r10702;
        double r10706 = r10700 / r10705;
        return r10706;
}

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.3

    \[\leadsto \color{blue}{\frac{\sin v}{\frac{\mathsf{fma}\left(\cos v, e, 1\right)}{e}}}\]
  3. Final simplification0.3

    \[\leadsto \frac{\sin v}{\frac{\mathsf{fma}\left(\cos v, e, 1\right)}{e}}\]

Reproduce

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