Average Error: 14.5 → 0.3
Time: 24.4s
Precision: 64
\[r \cdot \frac{\sin b}{\cos \left(a + b\right)}\]
\[\frac{r \cdot \sin b}{\mathsf{fma}\left(-\mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right), 1, \mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right)\right) + \mathsf{fma}\left(\cos a, \cos b, -\mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right)\right)}\]
r \cdot \frac{\sin b}{\cos \left(a + b\right)}
\frac{r \cdot \sin b}{\mathsf{fma}\left(-\mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right), 1, \mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right)\right) + \mathsf{fma}\left(\cos a, \cos b, -\mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right)\right)}
double f(double r, double a, double b) {
        double r983401 = r;
        double r983402 = b;
        double r983403 = sin(r983402);
        double r983404 = a;
        double r983405 = r983404 + r983402;
        double r983406 = cos(r983405);
        double r983407 = r983403 / r983406;
        double r983408 = r983401 * r983407;
        return r983408;
}

double f(double r, double a, double b) {
        double r983409 = r;
        double r983410 = b;
        double r983411 = sin(r983410);
        double r983412 = r983409 * r983411;
        double r983413 = a;
        double r983414 = sin(r983413);
        double r983415 = r983414 * r983411;
        double r983416 = expm1(r983415);
        double r983417 = log1p(r983416);
        double r983418 = -r983417;
        double r983419 = 1.0;
        double r983420 = fma(r983418, r983419, r983417);
        double r983421 = cos(r983413);
        double r983422 = cos(r983410);
        double r983423 = fma(r983421, r983422, r983418);
        double r983424 = r983420 + r983423;
        double r983425 = r983412 / r983424;
        return r983425;
}

Error

Bits error versus r

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 14.5

    \[r \cdot \frac{\sin b}{\cos \left(a + b\right)}\]
  2. Using strategy rm
  3. Applied cos-sum0.3

    \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\cos a \cdot \cos b - \sin a \cdot \sin b}}\]
  4. Using strategy rm
  5. Applied log1p-expm1-u0.3

    \[\leadsto r \cdot \frac{\sin b}{\cos a \cdot \cos b - \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right)}}\]
  6. Using strategy rm
  7. Applied *-un-lft-identity0.3

    \[\leadsto r \cdot \frac{\sin b}{\cos a \cdot \cos b - \color{blue}{1 \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right)}}\]
  8. Applied prod-diff0.3

    \[\leadsto r \cdot \frac{\sin b}{\color{blue}{\mathsf{fma}\left(\cos a, \cos b, -\mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right) \cdot 1\right) + \mathsf{fma}\left(-\mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right), 1, \mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right) \cdot 1\right)}}\]
  9. Using strategy rm
  10. Applied associate-*r/0.3

    \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\mathsf{fma}\left(\cos a, \cos b, -\mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right) \cdot 1\right) + \mathsf{fma}\left(-\mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right), 1, \mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right) \cdot 1\right)}}\]
  11. Final simplification0.3

    \[\leadsto \frac{r \cdot \sin b}{\mathsf{fma}\left(-\mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right), 1, \mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right)\right) + \mathsf{fma}\left(\cos a, \cos b, -\mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right)\right)}\]

Reproduce

herbie shell --seed 2019158 +o rules:numerics
(FPCore (r a b)
  :name "r*sin(b)/cos(a+b), B"
  (* r (/ (sin b) (cos (+ a b)))))