Average Error: 14.9 → 0.3
Time: 22.9s
Precision: 64
\[\frac{r \cdot \sin b}{\cos \left(a + b\right)}\]
\[\frac{r \cdot \sin b}{\mathsf{fma}\left(\cos b, \cos a, -\sin a \cdot \sin b\right)}\]
\frac{r \cdot \sin b}{\cos \left(a + b\right)}
\frac{r \cdot \sin b}{\mathsf{fma}\left(\cos b, \cos a, -\sin a \cdot \sin b\right)}
double f(double r, double a, double b) {
        double r24048 = r;
        double r24049 = b;
        double r24050 = sin(r24049);
        double r24051 = r24048 * r24050;
        double r24052 = a;
        double r24053 = r24052 + r24049;
        double r24054 = cos(r24053);
        double r24055 = r24051 / r24054;
        return r24055;
}

double f(double r, double a, double b) {
        double r24056 = r;
        double r24057 = b;
        double r24058 = sin(r24057);
        double r24059 = r24056 * r24058;
        double r24060 = cos(r24057);
        double r24061 = a;
        double r24062 = cos(r24061);
        double r24063 = sin(r24061);
        double r24064 = r24063 * r24058;
        double r24065 = -r24064;
        double r24066 = fma(r24060, r24062, r24065);
        double r24067 = r24059 / r24066;
        return r24067;
}

Error

Bits error versus r

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 14.9

    \[\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. Taylor expanded around inf 0.3

    \[\leadsto \frac{r \cdot \sin b}{\color{blue}{\cos b \cdot \cos a - \sin a \cdot \sin b}}\]
  5. Simplified0.3

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

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

Reproduce

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