Average Error: 14.4 → 0.2
Time: 48.0s
Precision: 64
\[\left(-x \cdot \frac{1}{\tan B}\right) + \frac{F}{\sin B} \cdot {\left(\left(F \cdot F + 2\right) + 2 \cdot x\right)}^{\left(-\frac{1}{2}\right)}\]
\[\begin{array}{l} \mathbf{if}\;F \le -16640897351.8930034637451171875:\\ \;\;\;\;\left(\frac{\frac{1}{\sin B}}{F \cdot F} - \frac{1}{\sin B}\right) - x \cdot \frac{1}{\tan B}\\ \mathbf{elif}\;F \le 8028.221689814057754119858145713806152344:\\ \;\;\;\;\frac{1}{\frac{\frac{\sin B}{{\left(\mathsf{fma}\left(F, F, \mathsf{fma}\left(x, 2, 2\right)\right)\right)}^{\left(-\frac{1}{2}\right)}}}{F}} - \frac{x \cdot 1}{\tan B}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\mathsf{fma}\left(1, {\left(\frac{1}{{F}^{2}}\right)}^{1} \cdot \sin B, \sin B\right)} - \frac{x \cdot 1}{\tan B}\\ \end{array}\]
\left(-x \cdot \frac{1}{\tan B}\right) + \frac{F}{\sin B} \cdot {\left(\left(F \cdot F + 2\right) + 2 \cdot x\right)}^{\left(-\frac{1}{2}\right)}
\begin{array}{l}
\mathbf{if}\;F \le -16640897351.8930034637451171875:\\
\;\;\;\;\left(\frac{\frac{1}{\sin B}}{F \cdot F} - \frac{1}{\sin B}\right) - x \cdot \frac{1}{\tan B}\\

\mathbf{elif}\;F \le 8028.221689814057754119858145713806152344:\\
\;\;\;\;\frac{1}{\frac{\frac{\sin B}{{\left(\mathsf{fma}\left(F, F, \mathsf{fma}\left(x, 2, 2\right)\right)\right)}^{\left(-\frac{1}{2}\right)}}}{F}} - \frac{x \cdot 1}{\tan B}\\

\mathbf{else}:\\
\;\;\;\;\frac{1}{\mathsf{fma}\left(1, {\left(\frac{1}{{F}^{2}}\right)}^{1} \cdot \sin B, \sin B\right)} - \frac{x \cdot 1}{\tan B}\\

\end{array}
double f(double F, double B, double x) {
        double r2378696 = x;
        double r2378697 = 1.0;
        double r2378698 = B;
        double r2378699 = tan(r2378698);
        double r2378700 = r2378697 / r2378699;
        double r2378701 = r2378696 * r2378700;
        double r2378702 = -r2378701;
        double r2378703 = F;
        double r2378704 = sin(r2378698);
        double r2378705 = r2378703 / r2378704;
        double r2378706 = r2378703 * r2378703;
        double r2378707 = 2.0;
        double r2378708 = r2378706 + r2378707;
        double r2378709 = r2378707 * r2378696;
        double r2378710 = r2378708 + r2378709;
        double r2378711 = r2378697 / r2378707;
        double r2378712 = -r2378711;
        double r2378713 = pow(r2378710, r2378712);
        double r2378714 = r2378705 * r2378713;
        double r2378715 = r2378702 + r2378714;
        return r2378715;
}

double f(double F, double B, double x) {
        double r2378716 = F;
        double r2378717 = -16640897351.893003;
        bool r2378718 = r2378716 <= r2378717;
        double r2378719 = 1.0;
        double r2378720 = B;
        double r2378721 = sin(r2378720);
        double r2378722 = r2378719 / r2378721;
        double r2378723 = r2378716 * r2378716;
        double r2378724 = r2378722 / r2378723;
        double r2378725 = 1.0;
        double r2378726 = r2378725 / r2378721;
        double r2378727 = r2378724 - r2378726;
        double r2378728 = x;
        double r2378729 = tan(r2378720);
        double r2378730 = r2378719 / r2378729;
        double r2378731 = r2378728 * r2378730;
        double r2378732 = r2378727 - r2378731;
        double r2378733 = 8028.221689814058;
        bool r2378734 = r2378716 <= r2378733;
        double r2378735 = 2.0;
        double r2378736 = fma(r2378728, r2378735, r2378735);
        double r2378737 = fma(r2378716, r2378716, r2378736);
        double r2378738 = r2378719 / r2378735;
        double r2378739 = -r2378738;
        double r2378740 = pow(r2378737, r2378739);
        double r2378741 = r2378721 / r2378740;
        double r2378742 = r2378741 / r2378716;
        double r2378743 = r2378725 / r2378742;
        double r2378744 = r2378728 * r2378719;
        double r2378745 = r2378744 / r2378729;
        double r2378746 = r2378743 - r2378745;
        double r2378747 = pow(r2378716, r2378735);
        double r2378748 = r2378725 / r2378747;
        double r2378749 = pow(r2378748, r2378719);
        double r2378750 = r2378749 * r2378721;
        double r2378751 = fma(r2378719, r2378750, r2378721);
        double r2378752 = r2378725 / r2378751;
        double r2378753 = r2378752 - r2378745;
        double r2378754 = r2378734 ? r2378746 : r2378753;
        double r2378755 = r2378718 ? r2378732 : r2378754;
        return r2378755;
}

Error

Bits error versus F

Bits error versus B

Bits error versus x

Derivation

  1. Split input into 3 regimes
  2. if F < -16640897351.893003

    1. Initial program 26.1

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

      \[\leadsto \color{blue}{\frac{F}{\frac{\sin B}{{\left(\mathsf{fma}\left(F, F, \mathsf{fma}\left(x, 2, 2\right)\right)\right)}^{\left(-\frac{1}{2}\right)}}} - \frac{1}{\tan B} \cdot x}\]
    3. Taylor expanded around -inf 0.2

      \[\leadsto \color{blue}{\left(1 \cdot \frac{1}{{F}^{2} \cdot \sin B} - \frac{1}{\sin B}\right)} - \frac{1}{\tan B} \cdot x\]
    4. Simplified0.2

      \[\leadsto \color{blue}{\left(\frac{\frac{1}{\sin B}}{F \cdot F} - \frac{1}{\sin B}\right)} - \frac{1}{\tan B} \cdot x\]

    if -16640897351.893003 < F < 8028.221689814058

    1. Initial program 0.4

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

      \[\leadsto \color{blue}{\frac{F}{\frac{\sin B}{{\left(\mathsf{fma}\left(F, F, \mathsf{fma}\left(x, 2, 2\right)\right)\right)}^{\left(-\frac{1}{2}\right)}}} - \frac{1}{\tan B} \cdot x}\]
    3. Using strategy rm
    4. Applied associate-*l/0.3

      \[\leadsto \frac{F}{\frac{\sin B}{{\left(\mathsf{fma}\left(F, F, \mathsf{fma}\left(x, 2, 2\right)\right)\right)}^{\left(-\frac{1}{2}\right)}}} - \color{blue}{\frac{1 \cdot x}{\tan B}}\]
    5. Using strategy rm
    6. Applied clear-num0.3

      \[\leadsto \color{blue}{\frac{1}{\frac{\frac{\sin B}{{\left(\mathsf{fma}\left(F, F, \mathsf{fma}\left(x, 2, 2\right)\right)\right)}^{\left(-\frac{1}{2}\right)}}}{F}}} - \frac{1 \cdot x}{\tan B}\]

    if 8028.221689814058 < F

    1. Initial program 25.9

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

      \[\leadsto \color{blue}{\frac{F}{\frac{\sin B}{{\left(\mathsf{fma}\left(F, F, \mathsf{fma}\left(x, 2, 2\right)\right)\right)}^{\left(-\frac{1}{2}\right)}}} - \frac{1}{\tan B} \cdot x}\]
    3. Using strategy rm
    4. Applied associate-*l/20.0

      \[\leadsto \frac{F}{\frac{\sin B}{{\left(\mathsf{fma}\left(F, F, \mathsf{fma}\left(x, 2, 2\right)\right)\right)}^{\left(-\frac{1}{2}\right)}}} - \color{blue}{\frac{1 \cdot x}{\tan B}}\]
    5. Using strategy rm
    6. Applied clear-num20.0

      \[\leadsto \color{blue}{\frac{1}{\frac{\frac{\sin B}{{\left(\mathsf{fma}\left(F, F, \mathsf{fma}\left(x, 2, 2\right)\right)\right)}^{\left(-\frac{1}{2}\right)}}}{F}}} - \frac{1 \cdot x}{\tan B}\]
    7. Taylor expanded around inf 0.1

      \[\leadsto \frac{1}{\color{blue}{1 \cdot \left({\left(\frac{1}{{F}^{2}}\right)}^{1} \cdot \sin B\right) + \sin B}} - \frac{1 \cdot x}{\tan B}\]
    8. Simplified0.1

      \[\leadsto \frac{1}{\color{blue}{\mathsf{fma}\left(1, {\left(\frac{1}{{F}^{2}}\right)}^{1} \cdot \sin B, \sin B\right)}} - \frac{1 \cdot x}{\tan B}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.2

    \[\leadsto \begin{array}{l} \mathbf{if}\;F \le -16640897351.8930034637451171875:\\ \;\;\;\;\left(\frac{\frac{1}{\sin B}}{F \cdot F} - \frac{1}{\sin B}\right) - x \cdot \frac{1}{\tan B}\\ \mathbf{elif}\;F \le 8028.221689814057754119858145713806152344:\\ \;\;\;\;\frac{1}{\frac{\frac{\sin B}{{\left(\mathsf{fma}\left(F, F, \mathsf{fma}\left(x, 2, 2\right)\right)\right)}^{\left(-\frac{1}{2}\right)}}}{F}} - \frac{x \cdot 1}{\tan B}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\mathsf{fma}\left(1, {\left(\frac{1}{{F}^{2}}\right)}^{1} \cdot \sin B, \sin B\right)} - \frac{x \cdot 1}{\tan B}\\ \end{array}\]

Reproduce

herbie shell --seed 2019169 +o rules:numerics
(FPCore (F B x)
  :name "VandenBroeck and Keller, Equation (23)"
  (+ (- (* x (/ 1.0 (tan B)))) (* (/ F (sin B)) (pow (+ (+ (* F F) 2.0) (* 2.0 x)) (- (/ 1.0 2.0))))))