Average Error: 15.2 → 0.3
Time: 22.3s
Precision: 64
\[\frac{r \cdot \sin b}{\cos \left(a + b\right)}\]
\[\frac{r \cdot \sin b}{\mathsf{fma}\left(\cos a, \cos b, -\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 a, \cos b, -\sin a \cdot \sin b\right)}
double f(double r, double a, double b) {
        double r24141 = r;
        double r24142 = b;
        double r24143 = sin(r24142);
        double r24144 = r24141 * r24143;
        double r24145 = a;
        double r24146 = r24145 + r24142;
        double r24147 = cos(r24146);
        double r24148 = r24144 / r24147;
        return r24148;
}

double f(double r, double a, double b) {
        double r24149 = r;
        double r24150 = b;
        double r24151 = sin(r24150);
        double r24152 = r24149 * r24151;
        double r24153 = a;
        double r24154 = cos(r24153);
        double r24155 = cos(r24150);
        double r24156 = sin(r24153);
        double r24157 = r24156 * r24151;
        double r24158 = -r24157;
        double r24159 = fma(r24154, r24155, r24158);
        double r24160 = r24152 / r24159;
        return r24160;
}

Error

Bits error versus r

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 15.2

    \[\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 fma-neg0.3

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

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

Reproduce

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