Average Error: 0.1 → 0.1
Time: 20.1s
Precision: 64
\[0.0 \le e \le 1\]
\[\frac{e \cdot \sin v}{1 + e \cdot \cos v}\]
\[\frac{e}{\mathsf{fma}\left(e, \cos v, 1\right)} \cdot \sin v\]
\frac{e \cdot \sin v}{1 + e \cdot \cos v}
\frac{e}{\mathsf{fma}\left(e, \cos v, 1\right)} \cdot \sin v
double f(double e, double v) {
        double r910083 = e;
        double r910084 = v;
        double r910085 = sin(r910084);
        double r910086 = r910083 * r910085;
        double r910087 = 1.0;
        double r910088 = cos(r910084);
        double r910089 = r910083 * r910088;
        double r910090 = r910087 + r910089;
        double r910091 = r910086 / r910090;
        return r910091;
}

double f(double e, double v) {
        double r910092 = e;
        double r910093 = v;
        double r910094 = cos(r910093);
        double r910095 = 1.0;
        double r910096 = fma(r910092, r910094, r910095);
        double r910097 = r910092 / r910096;
        double r910098 = sin(r910093);
        double r910099 = r910097 * r910098;
        return r910099;
}

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{\sin v}{\mathsf{fma}\left(\cos v, e, 1\right)} \cdot e}\]
  3. Using strategy rm
  4. Applied div-inv0.1

    \[\leadsto \color{blue}{\left(\sin v \cdot \frac{1}{\mathsf{fma}\left(\cos v, e, 1\right)}\right)} \cdot e\]
  5. Applied associate-*l*0.1

    \[\leadsto \color{blue}{\sin v \cdot \left(\frac{1}{\mathsf{fma}\left(\cos v, e, 1\right)} \cdot e\right)}\]
  6. Simplified0.1

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

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

Reproduce

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