Average Error: 14.8 → 0.3
Time: 25.5s
Precision: 64
\[\frac{r \cdot \sin b}{\cos \left(a + b\right)}\]
\[\frac{r \cdot \sin b}{\mathsf{fma}\left(\cos a, \cos b, \left(-\sin b\right) \cdot \sin a\right) + \mathsf{fma}\left(-\sin b, \sin a, \mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right)\right)}\]
\frac{r \cdot \sin b}{\cos \left(a + b\right)}
\frac{r \cdot \sin b}{\mathsf{fma}\left(\cos a, \cos b, \left(-\sin b\right) \cdot \sin a\right) + \mathsf{fma}\left(-\sin b, \sin a, \mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right)\right)}
double f(double r, double a, double b) {
        double r1058263 = r;
        double r1058264 = b;
        double r1058265 = sin(r1058264);
        double r1058266 = r1058263 * r1058265;
        double r1058267 = a;
        double r1058268 = r1058267 + r1058264;
        double r1058269 = cos(r1058268);
        double r1058270 = r1058266 / r1058269;
        return r1058270;
}

double f(double r, double a, double b) {
        double r1058271 = r;
        double r1058272 = b;
        double r1058273 = sin(r1058272);
        double r1058274 = r1058271 * r1058273;
        double r1058275 = a;
        double r1058276 = cos(r1058275);
        double r1058277 = cos(r1058272);
        double r1058278 = -r1058273;
        double r1058279 = sin(r1058275);
        double r1058280 = r1058278 * r1058279;
        double r1058281 = fma(r1058276, r1058277, r1058280);
        double r1058282 = r1058279 * r1058273;
        double r1058283 = expm1(r1058282);
        double r1058284 = log1p(r1058283);
        double r1058285 = fma(r1058278, r1058279, r1058284);
        double r1058286 = r1058281 + r1058285;
        double r1058287 = r1058274 / r1058286;
        return r1058287;
}

Error

Bits error versus r

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 14.8

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

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

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

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

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

Reproduce

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