Average Error: 15.4 → 0.3
Time: 22.0s
Precision: 64
\[r \cdot \frac{\sin b}{\cos \left(a + b\right)}\]
\[\frac{\sin b \cdot r}{\mathsf{fma}\left(\cos a, \cos b, -\sin b \cdot \sin a\right)}\]
r \cdot \frac{\sin b}{\cos \left(a + b\right)}
\frac{\sin b \cdot r}{\mathsf{fma}\left(\cos a, \cos b, -\sin b \cdot \sin a\right)}
double f(double r, double a, double b) {
        double r1376366 = r;
        double r1376367 = b;
        double r1376368 = sin(r1376367);
        double r1376369 = a;
        double r1376370 = r1376369 + r1376367;
        double r1376371 = cos(r1376370);
        double r1376372 = r1376368 / r1376371;
        double r1376373 = r1376366 * r1376372;
        return r1376373;
}

double f(double r, double a, double b) {
        double r1376374 = b;
        double r1376375 = sin(r1376374);
        double r1376376 = r;
        double r1376377 = r1376375 * r1376376;
        double r1376378 = a;
        double r1376379 = cos(r1376378);
        double r1376380 = cos(r1376374);
        double r1376381 = sin(r1376378);
        double r1376382 = r1376375 * r1376381;
        double r1376383 = -r1376382;
        double r1376384 = fma(r1376379, r1376380, r1376383);
        double r1376385 = r1376377 / r1376384;
        return r1376385;
}

Error

Bits error versus r

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 15.4

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

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

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

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

Reproduce

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