Average Error: 3.6 → 1.5
Time: 26.1s
Precision: 64
\[\alpha \gt -1 \land \beta \gt -1\]
\[\frac{\frac{\frac{\left(\left(\alpha + \beta\right) + \beta \cdot \alpha\right) + 1.0}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\left(\alpha + \beta\right) + 2 \cdot 1\right) + 1.0}\]
\[\begin{array}{l} \mathbf{if}\;\frac{\frac{\frac{1.0 + \left(\alpha \cdot \beta + \left(\beta + \alpha\right)\right)}{2 + \left(\beta + \alpha\right)}}{2 + \left(\beta + \alpha\right)}}{\left(2 + \left(\beta + \alpha\right)\right) + 1.0} \le 0.08333374198991911:\\ \;\;\;\;\frac{\frac{\frac{1.0 + \left(\alpha \cdot \beta + \left(\beta + \alpha\right)\right)}{2 + \left(\beta + \alpha\right)}}{2 + \left(\beta + \alpha\right)}}{\left(2 + \left(\beta + \alpha\right)\right) + 1.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(0.25, \beta + \alpha, 0.5\right)}{\mathsf{fma}\left(\left(\alpha + 2\right) + \beta, \left(\alpha + 2\right) + \beta, \left(\left(\alpha + 2\right) + \beta\right) \cdot 1.0\right)}\\ \end{array}\]
\frac{\frac{\frac{\left(\left(\alpha + \beta\right) + \beta \cdot \alpha\right) + 1.0}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\left(\alpha + \beta\right) + 2 \cdot 1\right) + 1.0}
\begin{array}{l}
\mathbf{if}\;\frac{\frac{\frac{1.0 + \left(\alpha \cdot \beta + \left(\beta + \alpha\right)\right)}{2 + \left(\beta + \alpha\right)}}{2 + \left(\beta + \alpha\right)}}{\left(2 + \left(\beta + \alpha\right)\right) + 1.0} \le 0.08333374198991911:\\
\;\;\;\;\frac{\frac{\frac{1.0 + \left(\alpha \cdot \beta + \left(\beta + \alpha\right)\right)}{2 + \left(\beta + \alpha\right)}}{2 + \left(\beta + \alpha\right)}}{\left(2 + \left(\beta + \alpha\right)\right) + 1.0}\\

\mathbf{else}:\\
\;\;\;\;\frac{\mathsf{fma}\left(0.25, \beta + \alpha, 0.5\right)}{\mathsf{fma}\left(\left(\alpha + 2\right) + \beta, \left(\alpha + 2\right) + \beta, \left(\left(\alpha + 2\right) + \beta\right) \cdot 1.0\right)}\\

\end{array}
double f(double alpha, double beta) {
        double r1605731 = alpha;
        double r1605732 = beta;
        double r1605733 = r1605731 + r1605732;
        double r1605734 = r1605732 * r1605731;
        double r1605735 = r1605733 + r1605734;
        double r1605736 = 1.0;
        double r1605737 = r1605735 + r1605736;
        double r1605738 = 2.0;
        double r1605739 = 1.0;
        double r1605740 = r1605738 * r1605739;
        double r1605741 = r1605733 + r1605740;
        double r1605742 = r1605737 / r1605741;
        double r1605743 = r1605742 / r1605741;
        double r1605744 = r1605741 + r1605736;
        double r1605745 = r1605743 / r1605744;
        return r1605745;
}

double f(double alpha, double beta) {
        double r1605746 = 1.0;
        double r1605747 = alpha;
        double r1605748 = beta;
        double r1605749 = r1605747 * r1605748;
        double r1605750 = r1605748 + r1605747;
        double r1605751 = r1605749 + r1605750;
        double r1605752 = r1605746 + r1605751;
        double r1605753 = 2.0;
        double r1605754 = r1605753 + r1605750;
        double r1605755 = r1605752 / r1605754;
        double r1605756 = r1605755 / r1605754;
        double r1605757 = r1605754 + r1605746;
        double r1605758 = r1605756 / r1605757;
        double r1605759 = 0.08333374198991911;
        bool r1605760 = r1605758 <= r1605759;
        double r1605761 = 0.25;
        double r1605762 = 0.5;
        double r1605763 = fma(r1605761, r1605750, r1605762);
        double r1605764 = r1605747 + r1605753;
        double r1605765 = r1605764 + r1605748;
        double r1605766 = r1605765 * r1605746;
        double r1605767 = fma(r1605765, r1605765, r1605766);
        double r1605768 = r1605763 / r1605767;
        double r1605769 = r1605760 ? r1605758 : r1605768;
        return r1605769;
}

Error

Bits error versus alpha

Bits error versus beta

Derivation

  1. Split input into 2 regimes
  2. if (/ (/ (/ (+ (+ (+ alpha beta) (* beta alpha)) 1.0) (+ (+ alpha beta) (* 2 1))) (+ (+ alpha beta) (* 2 1))) (+ (+ (+ alpha beta) (* 2 1)) 1.0)) < 0.08333374198991911

    1. Initial program 0.1

      \[\frac{\frac{\frac{\left(\left(\alpha + \beta\right) + \beta \cdot \alpha\right) + 1.0}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\left(\alpha + \beta\right) + 2 \cdot 1\right) + 1.0}\]

    if 0.08333374198991911 < (/ (/ (/ (+ (+ (+ alpha beta) (* beta alpha)) 1.0) (+ (+ alpha beta) (* 2 1))) (+ (+ alpha beta) (* 2 1))) (+ (+ (+ alpha beta) (* 2 1)) 1.0))

    1. Initial program 56.8

      \[\frac{\frac{\frac{\left(\left(\alpha + \beta\right) + \beta \cdot \alpha\right) + 1.0}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\left(\alpha + \beta\right) + 2 \cdot 1\right) + 1.0}\]
    2. Simplified56.8

      \[\leadsto \color{blue}{\frac{\frac{1.0 + \mathsf{fma}\left(\beta, \alpha, \beta + \alpha\right)}{\left(\alpha + 2\right) + \beta}}{\mathsf{fma}\left(\left(\alpha + 2\right) + \beta, \left(\alpha + 2\right) + \beta, \left(\left(\alpha + 2\right) + \beta\right) \cdot 1.0\right)}}\]
    3. Taylor expanded around 0 22.2

      \[\leadsto \frac{\color{blue}{0.5 + \left(0.25 \cdot \beta + 0.25 \cdot \alpha\right)}}{\mathsf{fma}\left(\left(\alpha + 2\right) + \beta, \left(\alpha + 2\right) + \beta, \left(\left(\alpha + 2\right) + \beta\right) \cdot 1.0\right)}\]
    4. Simplified22.2

      \[\leadsto \frac{\color{blue}{\mathsf{fma}\left(0.25, \beta + \alpha, 0.5\right)}}{\mathsf{fma}\left(\left(\alpha + 2\right) + \beta, \left(\alpha + 2\right) + \beta, \left(\left(\alpha + 2\right) + \beta\right) \cdot 1.0\right)}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{\frac{\frac{1.0 + \left(\alpha \cdot \beta + \left(\beta + \alpha\right)\right)}{2 + \left(\beta + \alpha\right)}}{2 + \left(\beta + \alpha\right)}}{\left(2 + \left(\beta + \alpha\right)\right) + 1.0} \le 0.08333374198991911:\\ \;\;\;\;\frac{\frac{\frac{1.0 + \left(\alpha \cdot \beta + \left(\beta + \alpha\right)\right)}{2 + \left(\beta + \alpha\right)}}{2 + \left(\beta + \alpha\right)}}{\left(2 + \left(\beta + \alpha\right)\right) + 1.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(0.25, \beta + \alpha, 0.5\right)}{\mathsf{fma}\left(\left(\alpha + 2\right) + \beta, \left(\alpha + 2\right) + \beta, \left(\left(\alpha + 2\right) + \beta\right) \cdot 1.0\right)}\\ \end{array}\]

Reproduce

herbie shell --seed 2019151 +o rules:numerics
(FPCore (alpha beta)
  :name "Octave 3.8, jcobi/3"
  :pre (and (> alpha -1) (> beta -1))
  (/ (/ (/ (+ (+ (+ alpha beta) (* beta alpha)) 1.0) (+ (+ alpha beta) (* 2 1))) (+ (+ alpha beta) (* 2 1))) (+ (+ (+ alpha beta) (* 2 1)) 1.0)))