Average Error: 3.8 → 2.4
Time: 18.5s
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 6.632569412339182309516867344517319586661 \cdot 10^{173}:\\ \;\;\;\;\frac{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{\frac{1 + \mathsf{fma}\left(\alpha, \beta, \alpha + \beta\right)}{\mathsf{fma}\left(1, 2, \alpha + \beta\right)}}{\mathsf{fma}\left(1, 2, \alpha + \beta\right)}\right)\right)}{\mathsf{fma}\left(1, 2, \alpha + \beta\right) + 1}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{expm1}\left(\mathsf{log1p}\left(0\right)\right)}{\mathsf{fma}\left(1, 2, \alpha + \beta\right) + 1}\\ \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 6.632569412339182309516867344517319586661 \cdot 10^{173}:\\
\;\;\;\;\frac{\mathsf{expm1}\left(\mathsf{log1p}\left(\frac{\frac{1 + \mathsf{fma}\left(\alpha, \beta, \alpha + \beta\right)}{\mathsf{fma}\left(1, 2, \alpha + \beta\right)}}{\mathsf{fma}\left(1, 2, \alpha + \beta\right)}\right)\right)}{\mathsf{fma}\left(1, 2, \alpha + \beta\right) + 1}\\

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

\end{array}
double f(double alpha, double beta) {
        double r99621 = alpha;
        double r99622 = beta;
        double r99623 = r99621 + r99622;
        double r99624 = r99622 * r99621;
        double r99625 = r99623 + r99624;
        double r99626 = 1.0;
        double r99627 = r99625 + r99626;
        double r99628 = 2.0;
        double r99629 = r99628 * r99626;
        double r99630 = r99623 + r99629;
        double r99631 = r99627 / r99630;
        double r99632 = r99631 / r99630;
        double r99633 = r99630 + r99626;
        double r99634 = r99632 / r99633;
        return r99634;
}

double f(double alpha, double beta) {
        double r99635 = beta;
        double r99636 = 6.632569412339182e+173;
        bool r99637 = r99635 <= r99636;
        double r99638 = 1.0;
        double r99639 = alpha;
        double r99640 = r99639 + r99635;
        double r99641 = fma(r99639, r99635, r99640);
        double r99642 = r99638 + r99641;
        double r99643 = 2.0;
        double r99644 = fma(r99638, r99643, r99640);
        double r99645 = r99642 / r99644;
        double r99646 = r99645 / r99644;
        double r99647 = log1p(r99646);
        double r99648 = expm1(r99647);
        double r99649 = r99644 + r99638;
        double r99650 = r99648 / r99649;
        double r99651 = 0.0;
        double r99652 = log1p(r99651);
        double r99653 = expm1(r99652);
        double r99654 = r99653 / r99649;
        double r99655 = r99637 ? r99650 : r99654;
        return r99655;
}

Error

Bits error versus alpha

Bits error versus beta

Derivation

  1. Split input into 2 regimes
  2. if beta < 6.632569412339182e+173

    1. Initial program 1.6

      \[\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.6

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

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

    if 6.632569412339182e+173 < beta

    1. Initial program 17.2

      \[\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. Simplified17.2

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

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

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

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

Reproduce

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