Average Error: 3.8 → 1.2
Time: 6.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 1.1125280590322559 \cdot 10^{161}:\\ \;\;\;\;\frac{\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1}{\frac{\mathsf{fma}\left(1, 2, \alpha + \beta\right)}{\beta + \left(\alpha + \mathsf{fma}\left(\alpha, \beta, 1\right)\right)} \cdot \mathsf{fma}\left(1, 2, \alpha + \beta\right)}\right)\right)}{\left(\left(\alpha + \beta\right) + 2 \cdot 1\right) + 1}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1}{\left(\left(\frac{1}{\alpha} + \frac{1}{\beta}\right) - \frac{1}{{\alpha}^{2}}\right) \cdot \mathsf{fma}\left(1, 2, \alpha + \beta\right)}\right)\right)}{\left(\left(\alpha + \beta\right) + 2 \cdot 1\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 1.1125280590322559 \cdot 10^{161}:\\
\;\;\;\;\frac{\mathsf{log1p}\left(\mathsf{expm1}\left(\frac{1}{\frac{\mathsf{fma}\left(1, 2, \alpha + \beta\right)}{\beta + \left(\alpha + \mathsf{fma}\left(\alpha, \beta, 1\right)\right)} \cdot \mathsf{fma}\left(1, 2, \alpha + \beta\right)}\right)\right)}{\left(\left(\alpha + \beta\right) + 2 \cdot 1\right) + 1}\\

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

\end{array}
double f(double alpha, double beta) {
        double r89663 = alpha;
        double r89664 = beta;
        double r89665 = r89663 + r89664;
        double r89666 = r89664 * r89663;
        double r89667 = r89665 + r89666;
        double r89668 = 1.0;
        double r89669 = r89667 + r89668;
        double r89670 = 2.0;
        double r89671 = r89670 * r89668;
        double r89672 = r89665 + r89671;
        double r89673 = r89669 / r89672;
        double r89674 = r89673 / r89672;
        double r89675 = r89672 + r89668;
        double r89676 = r89674 / r89675;
        return r89676;
}

double f(double alpha, double beta) {
        double r89677 = beta;
        double r89678 = 1.1125280590322559e+161;
        bool r89679 = r89677 <= r89678;
        double r89680 = 1.0;
        double r89681 = 1.0;
        double r89682 = 2.0;
        double r89683 = alpha;
        double r89684 = r89683 + r89677;
        double r89685 = fma(r89681, r89682, r89684);
        double r89686 = fma(r89683, r89677, r89681);
        double r89687 = r89683 + r89686;
        double r89688 = r89677 + r89687;
        double r89689 = r89685 / r89688;
        double r89690 = r89689 * r89685;
        double r89691 = r89680 / r89690;
        double r89692 = expm1(r89691);
        double r89693 = log1p(r89692);
        double r89694 = r89682 * r89681;
        double r89695 = r89684 + r89694;
        double r89696 = r89695 + r89681;
        double r89697 = r89693 / r89696;
        double r89698 = r89680 / r89683;
        double r89699 = r89680 / r89677;
        double r89700 = r89698 + r89699;
        double r89701 = 2.0;
        double r89702 = pow(r89683, r89701);
        double r89703 = r89680 / r89702;
        double r89704 = r89700 - r89703;
        double r89705 = r89704 * r89685;
        double r89706 = r89680 / r89705;
        double r89707 = expm1(r89706);
        double r89708 = log1p(r89707);
        double r89709 = r89708 / r89696;
        double r89710 = r89679 ? r89697 : r89709;
        return r89710;
}

Error

Bits error versus alpha

Bits error versus beta

Derivation

  1. Split input into 2 regimes
  2. if beta < 1.1125280590322559e+161

    1. Initial program 1.4

      \[\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. Using strategy rm
    3. Applied log1p-expm1-u1.4

      \[\leadsto \frac{\color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\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}\right)\right)}}{\left(\left(\alpha + \beta\right) + 2 \cdot 1\right) + 1}\]
    4. Using strategy rm
    5. Applied clear-num1.4

      \[\leadsto \frac{\mathsf{log1p}\left(\mathsf{expm1}\left(\color{blue}{\frac{1}{\frac{\left(\alpha + \beta\right) + 2 \cdot 1}{\frac{\left(\left(\alpha + \beta\right) + \beta \cdot \alpha\right) + 1}{\left(\alpha + \beta\right) + 2 \cdot 1}}}}\right)\right)}{\left(\left(\alpha + \beta\right) + 2 \cdot 1\right) + 1}\]
    6. Simplified1.4

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

    if 1.1125280590322559e+161 < beta

    1. Initial program 16.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. Using strategy rm
    3. Applied log1p-expm1-u16.2

      \[\leadsto \frac{\color{blue}{\mathsf{log1p}\left(\mathsf{expm1}\left(\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}\right)\right)}}{\left(\left(\alpha + \beta\right) + 2 \cdot 1\right) + 1}\]
    4. Using strategy rm
    5. Applied clear-num16.2

      \[\leadsto \frac{\mathsf{log1p}\left(\mathsf{expm1}\left(\color{blue}{\frac{1}{\frac{\left(\alpha + \beta\right) + 2 \cdot 1}{\frac{\left(\left(\alpha + \beta\right) + \beta \cdot \alpha\right) + 1}{\left(\alpha + \beta\right) + 2 \cdot 1}}}}\right)\right)}{\left(\left(\alpha + \beta\right) + 2 \cdot 1\right) + 1}\]
    6. Simplified16.2

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

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

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

Reproduce

herbie shell --seed 2020056 +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)))