Average Error: 0.2 → 0.2
Time: 21.3s
Precision: 64
\[\left(-x \cdot \frac{1}{\tan B}\right) + \frac{1}{\sin B}\]
\[\mathsf{fma}\left(\frac{x \cdot \cos B}{\sin B}, -1, \frac{1}{\sin B}\right)\]
\left(-x \cdot \frac{1}{\tan B}\right) + \frac{1}{\sin B}
\mathsf{fma}\left(\frac{x \cdot \cos B}{\sin B}, -1, \frac{1}{\sin B}\right)
double f(double B, double x) {
        double r23643 = x;
        double r23644 = 1.0;
        double r23645 = B;
        double r23646 = tan(r23645);
        double r23647 = r23644 / r23646;
        double r23648 = r23643 * r23647;
        double r23649 = -r23648;
        double r23650 = sin(r23645);
        double r23651 = r23644 / r23650;
        double r23652 = r23649 + r23651;
        return r23652;
}

double f(double B, double x) {
        double r23653 = x;
        double r23654 = B;
        double r23655 = cos(r23654);
        double r23656 = r23653 * r23655;
        double r23657 = sin(r23654);
        double r23658 = r23656 / r23657;
        double r23659 = 1.0;
        double r23660 = -r23659;
        double r23661 = r23659 / r23657;
        double r23662 = fma(r23658, r23660, r23661);
        return r23662;
}

Error

Bits error versus B

Bits error versus x

Derivation

  1. Initial program 0.2

    \[\left(-x \cdot \frac{1}{\tan B}\right) + \frac{1}{\sin B}\]
  2. Simplified0.2

    \[\leadsto \color{blue}{\frac{1}{\sin B} - x \cdot \frac{1}{\tan B}}\]
  3. Using strategy rm
  4. Applied associate-*r/0.1

    \[\leadsto \frac{1}{\sin B} - \color{blue}{\frac{x \cdot 1}{\tan B}}\]
  5. Taylor expanded around inf 0.2

    \[\leadsto \color{blue}{1 \cdot \frac{1}{\sin B} - 1 \cdot \frac{x \cdot \cos B}{\sin B}}\]
  6. Simplified0.2

    \[\leadsto \color{blue}{\mathsf{fma}\left(\frac{x \cdot \cos B}{\sin B}, -1, \frac{1}{\sin B}\right)}\]
  7. Final simplification0.2

    \[\leadsto \mathsf{fma}\left(\frac{x \cdot \cos B}{\sin B}, -1, \frac{1}{\sin B}\right)\]

Reproduce

herbie shell --seed 2019323 +o rules:numerics
(FPCore (B x)
  :name "VandenBroeck and Keller, Equation (24)"
  :precision binary64
  (+ (- (* x (/ 1 (tan B)))) (/ 1 (sin B))))