Average Error: 15.3 → 0.4
Time: 6.4s
Precision: 64
\[r \cdot \frac{\sin b}{\cos \left(a + b\right)}\]
\[\frac{r \cdot \sin b}{\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(\cos a, \cos b, -\sin a \cdot \sin b\right)\right)\right)}\]
r \cdot \frac{\sin b}{\cos \left(a + b\right)}
\frac{r \cdot \sin b}{\mathsf{log1p}\left(\mathsf{expm1}\left(\mathsf{fma}\left(\cos a, \cos b, -\sin a \cdot \sin b\right)\right)\right)}
double f(double r, double a, double b) {
        double r16594 = r;
        double r16595 = b;
        double r16596 = sin(r16595);
        double r16597 = a;
        double r16598 = r16597 + r16595;
        double r16599 = cos(r16598);
        double r16600 = r16596 / r16599;
        double r16601 = r16594 * r16600;
        return r16601;
}

double f(double r, double a, double b) {
        double r16602 = r;
        double r16603 = b;
        double r16604 = sin(r16603);
        double r16605 = r16602 * r16604;
        double r16606 = a;
        double r16607 = cos(r16606);
        double r16608 = cos(r16603);
        double r16609 = sin(r16606);
        double r16610 = r16609 * r16604;
        double r16611 = -r16610;
        double r16612 = fma(r16607, r16608, r16611);
        double r16613 = expm1(r16612);
        double r16614 = log1p(r16613);
        double r16615 = r16605 / r16614;
        return r16615;
}

Error

Bits error versus r

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 15.3

    \[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 associate-*r/0.3

    \[\leadsto \color{blue}{\frac{r \cdot \sin b}{\cos a \cdot \cos b - \sin a \cdot \sin b}}\]
  6. Using strategy rm
  7. Applied fma-neg0.3

    \[\leadsto \frac{r \cdot \sin b}{\color{blue}{\mathsf{fma}\left(\cos a, \cos b, -\sin a \cdot \sin b\right)}}\]
  8. Using strategy rm
  9. Applied log1p-expm1-u0.4

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

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

Reproduce

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