Average Error: 3.7 → 1.2
Time: 34.1s
Precision: 64
\[\alpha \gt -1 \land \beta \gt -1\]
\[\frac{\frac{\frac{\left(\left(\alpha + \beta\right) + \beta \cdot \alpha\right) + 1}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\left(\alpha + \beta\right) + 2 \cdot 1\right) + 1}\]
\[\begin{array}{l} \mathbf{if}\;\beta \le 2.988049090043007512588141918391100231965 \cdot 10^{155}:\\ \;\;\;\;\frac{\frac{1}{\frac{\mathsf{fma}\left(2, 1, \beta + \alpha\right)}{\frac{1 + \mathsf{fma}\left(\beta, \alpha, \beta + \alpha\right)}{\mathsf{fma}\left(2, 1, \beta + \alpha\right)}}}}{1 + \mathsf{fma}\left(2, 1, \beta + \alpha\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{1}{\frac{\beta}{\alpha} + \left(2 + \frac{\alpha}{\beta}\right)}}{1 + \mathsf{fma}\left(2, 1, \beta + \alpha\right)}\\ \end{array}\]
\frac{\frac{\frac{\left(\left(\alpha + \beta\right) + \beta \cdot \alpha\right) + 1}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\left(\alpha + \beta\right) + 2 \cdot 1\right) + 1}
\begin{array}{l}
\mathbf{if}\;\beta \le 2.988049090043007512588141918391100231965 \cdot 10^{155}:\\
\;\;\;\;\frac{\frac{1}{\frac{\mathsf{fma}\left(2, 1, \beta + \alpha\right)}{\frac{1 + \mathsf{fma}\left(\beta, \alpha, \beta + \alpha\right)}{\mathsf{fma}\left(2, 1, \beta + \alpha\right)}}}}{1 + \mathsf{fma}\left(2, 1, \beta + \alpha\right)}\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{1}{\frac{\beta}{\alpha} + \left(2 + \frac{\alpha}{\beta}\right)}}{1 + \mathsf{fma}\left(2, 1, \beta + \alpha\right)}\\

\end{array}
double f(double alpha, double beta) {
        double r3351579 = alpha;
        double r3351580 = beta;
        double r3351581 = r3351579 + r3351580;
        double r3351582 = r3351580 * r3351579;
        double r3351583 = r3351581 + r3351582;
        double r3351584 = 1.0;
        double r3351585 = r3351583 + r3351584;
        double r3351586 = 2.0;
        double r3351587 = r3351586 * r3351584;
        double r3351588 = r3351581 + r3351587;
        double r3351589 = r3351585 / r3351588;
        double r3351590 = r3351589 / r3351588;
        double r3351591 = r3351588 + r3351584;
        double r3351592 = r3351590 / r3351591;
        return r3351592;
}

double f(double alpha, double beta) {
        double r3351593 = beta;
        double r3351594 = 2.9880490900430075e+155;
        bool r3351595 = r3351593 <= r3351594;
        double r3351596 = 1.0;
        double r3351597 = 2.0;
        double r3351598 = 1.0;
        double r3351599 = alpha;
        double r3351600 = r3351593 + r3351599;
        double r3351601 = fma(r3351597, r3351598, r3351600);
        double r3351602 = fma(r3351593, r3351599, r3351600);
        double r3351603 = r3351598 + r3351602;
        double r3351604 = r3351603 / r3351601;
        double r3351605 = r3351601 / r3351604;
        double r3351606 = r3351596 / r3351605;
        double r3351607 = r3351598 + r3351601;
        double r3351608 = r3351606 / r3351607;
        double r3351609 = r3351593 / r3351599;
        double r3351610 = 2.0;
        double r3351611 = r3351599 / r3351593;
        double r3351612 = r3351610 + r3351611;
        double r3351613 = r3351609 + r3351612;
        double r3351614 = r3351596 / r3351613;
        double r3351615 = r3351614 / r3351607;
        double r3351616 = r3351595 ? r3351608 : r3351615;
        return r3351616;
}

Error

Bits error versus alpha

Bits error versus beta

Derivation

  1. Split input into 2 regimes
  2. if beta < 2.9880490900430075e+155

    1. Initial program 1.3

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

      \[\leadsto \color{blue}{\frac{\frac{\frac{1 + \mathsf{fma}\left(\beta, \alpha, \beta + \alpha\right)}{\mathsf{fma}\left(2, 1, \beta + \alpha\right)}}{\mathsf{fma}\left(2, 1, \beta + \alpha\right)}}{1 + \mathsf{fma}\left(2, 1, \beta + \alpha\right)}}\]
    3. Using strategy rm
    4. Applied clear-num1.3

      \[\leadsto \frac{\color{blue}{\frac{1}{\frac{\mathsf{fma}\left(2, 1, \beta + \alpha\right)}{\frac{1 + \mathsf{fma}\left(\beta, \alpha, \beta + \alpha\right)}{\mathsf{fma}\left(2, 1, \beta + \alpha\right)}}}}}{1 + \mathsf{fma}\left(2, 1, \beta + \alpha\right)}\]

    if 2.9880490900430075e+155 < beta

    1. Initial program 15.5

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

      \[\leadsto \color{blue}{\frac{\frac{\frac{1 + \mathsf{fma}\left(\beta, \alpha, \beta + \alpha\right)}{\mathsf{fma}\left(2, 1, \beta + \alpha\right)}}{\mathsf{fma}\left(2, 1, \beta + \alpha\right)}}{1 + \mathsf{fma}\left(2, 1, \beta + \alpha\right)}}\]
    3. Using strategy rm
    4. Applied clear-num15.5

      \[\leadsto \frac{\color{blue}{\frac{1}{\frac{\mathsf{fma}\left(2, 1, \beta + \alpha\right)}{\frac{1 + \mathsf{fma}\left(\beta, \alpha, \beta + \alpha\right)}{\mathsf{fma}\left(2, 1, \beta + \alpha\right)}}}}}{1 + \mathsf{fma}\left(2, 1, \beta + \alpha\right)}\]
    5. Taylor expanded around inf 0.6

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\beta \le 2.988049090043007512588141918391100231965 \cdot 10^{155}:\\ \;\;\;\;\frac{\frac{1}{\frac{\mathsf{fma}\left(2, 1, \beta + \alpha\right)}{\frac{1 + \mathsf{fma}\left(\beta, \alpha, \beta + \alpha\right)}{\mathsf{fma}\left(2, 1, \beta + \alpha\right)}}}}{1 + \mathsf{fma}\left(2, 1, \beta + \alpha\right)}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{1}{\frac{\beta}{\alpha} + \left(2 + \frac{\alpha}{\beta}\right)}}{1 + \mathsf{fma}\left(2, 1, \beta + \alpha\right)}\\ \end{array}\]

Reproduce

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