Average Error: 14.5 → 0.3
Time: 23.5s
Precision: 64
\[\frac{r \cdot \sin b}{\cos \left(a + b\right)}\]
\[\frac{r \cdot \sin b}{\mathsf{fma}\left(-\mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right), 1, \mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right)\right) + \mathsf{fma}\left(\cos a, \cos b, -\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(-\mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right), 1, \mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right)\right) + \mathsf{fma}\left(\cos a, \cos b, -\mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right)\right)}
double f(double r, double a, double b) {
        double r1093011 = r;
        double r1093012 = b;
        double r1093013 = sin(r1093012);
        double r1093014 = r1093011 * r1093013;
        double r1093015 = a;
        double r1093016 = r1093015 + r1093012;
        double r1093017 = cos(r1093016);
        double r1093018 = r1093014 / r1093017;
        return r1093018;
}

double f(double r, double a, double b) {
        double r1093019 = r;
        double r1093020 = b;
        double r1093021 = sin(r1093020);
        double r1093022 = r1093019 * r1093021;
        double r1093023 = a;
        double r1093024 = sin(r1093023);
        double r1093025 = r1093024 * r1093021;
        double r1093026 = expm1(r1093025);
        double r1093027 = log1p(r1093026);
        double r1093028 = -r1093027;
        double r1093029 = 1.0;
        double r1093030 = fma(r1093028, r1093029, r1093027);
        double r1093031 = cos(r1093023);
        double r1093032 = cos(r1093020);
        double r1093033 = fma(r1093031, r1093032, r1093028);
        double r1093034 = r1093030 + r1093033;
        double r1093035 = r1093022 / r1093034;
        return r1093035;
}

Error

Bits error versus r

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 14.5

    \[\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 log1p-expm1-u0.3

    \[\leadsto \frac{r \cdot \sin b}{\cos a \cdot \cos b - \color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right)}}\]
  6. Using strategy rm
  7. Applied *-un-lft-identity0.3

    \[\leadsto \frac{r \cdot \sin b}{\cos a \cdot \cos b - \color{blue}{1 \cdot \mathsf{log1p}\left(\mathsf{expm1}\left(\sin a \cdot \sin b\right)\right)}}\]
  8. Applied prod-diff0.3

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

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

Reproduce

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