Average Error: 16.6 → 3.2
Time: 3.2m
Precision: 64
\[\alpha \gt -1 \land \beta \gt -1\]
\[\frac{\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2.0} + 1.0}{2.0}\]
\[\begin{array}{l} \mathbf{if}\;\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2.0} \le -0.9999439615156119:\\ \;\;\;\;\frac{\frac{\beta}{\left(\alpha + \beta\right) + 2.0} - \mathsf{fma}\left(\left(\frac{-1}{\alpha}\right), 2.0, \left(\mathsf{fma}\left(\left(\frac{8.0}{\alpha \cdot \alpha}\right), \left(\frac{-1}{\alpha}\right), \left(\frac{4.0}{\alpha \cdot \alpha}\right)\right)\right)\right)}{2.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\left(\beta - \alpha\right), \left(\frac{1}{\left(\alpha + \beta\right) + 2.0}\right), 1.0\right)}{2.0}\\ \end{array}\]
\frac{\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2.0} + 1.0}{2.0}
\begin{array}{l}
\mathbf{if}\;\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2.0} \le -0.9999439615156119:\\
\;\;\;\;\frac{\frac{\beta}{\left(\alpha + \beta\right) + 2.0} - \mathsf{fma}\left(\left(\frac{-1}{\alpha}\right), 2.0, \left(\mathsf{fma}\left(\left(\frac{8.0}{\alpha \cdot \alpha}\right), \left(\frac{-1}{\alpha}\right), \left(\frac{4.0}{\alpha \cdot \alpha}\right)\right)\right)\right)}{2.0}\\

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

\end{array}
double f(double alpha, double beta) {
        double r9756967 = beta;
        double r9756968 = alpha;
        double r9756969 = r9756967 - r9756968;
        double r9756970 = r9756968 + r9756967;
        double r9756971 = 2.0;
        double r9756972 = r9756970 + r9756971;
        double r9756973 = r9756969 / r9756972;
        double r9756974 = 1.0;
        double r9756975 = r9756973 + r9756974;
        double r9756976 = r9756975 / r9756971;
        return r9756976;
}

double f(double alpha, double beta) {
        double r9756977 = beta;
        double r9756978 = alpha;
        double r9756979 = r9756977 - r9756978;
        double r9756980 = r9756978 + r9756977;
        double r9756981 = 2.0;
        double r9756982 = r9756980 + r9756981;
        double r9756983 = r9756979 / r9756982;
        double r9756984 = -0.9999439615156119;
        bool r9756985 = r9756983 <= r9756984;
        double r9756986 = r9756977 / r9756982;
        double r9756987 = -1.0;
        double r9756988 = r9756987 / r9756978;
        double r9756989 = 8.0;
        double r9756990 = r9756978 * r9756978;
        double r9756991 = r9756989 / r9756990;
        double r9756992 = 4.0;
        double r9756993 = r9756992 / r9756990;
        double r9756994 = fma(r9756991, r9756988, r9756993);
        double r9756995 = fma(r9756988, r9756981, r9756994);
        double r9756996 = r9756986 - r9756995;
        double r9756997 = r9756996 / r9756981;
        double r9756998 = 1.0;
        double r9756999 = r9756998 / r9756982;
        double r9757000 = 1.0;
        double r9757001 = fma(r9756979, r9756999, r9757000);
        double r9757002 = r9757001 / r9756981;
        double r9757003 = r9756985 ? r9756997 : r9757002;
        return r9757003;
}

Error

Bits error versus alpha

Bits error versus beta

Derivation

  1. Split input into 2 regimes
  2. if (/ (- beta alpha) (+ (+ alpha beta) 2.0)) < -0.9999439615156119

    1. Initial program 59.3

      \[\frac{\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2.0} + 1.0}{2.0}\]
    2. Using strategy rm
    3. Applied div-sub59.2

      \[\leadsto \frac{\color{blue}{\left(\frac{\beta}{\left(\alpha + \beta\right) + 2.0} - \frac{\alpha}{\left(\alpha + \beta\right) + 2.0}\right)} + 1.0}{2.0}\]
    4. Applied associate-+l-57.4

      \[\leadsto \frac{\color{blue}{\frac{\beta}{\left(\alpha + \beta\right) + 2.0} - \left(\frac{\alpha}{\left(\alpha + \beta\right) + 2.0} - 1.0\right)}}{2.0}\]
    5. Taylor expanded around inf 11.5

      \[\leadsto \frac{\frac{\beta}{\left(\alpha + \beta\right) + 2.0} - \color{blue}{\left(4.0 \cdot \frac{1}{{\alpha}^{2}} - \left(2.0 \cdot \frac{1}{\alpha} + 8.0 \cdot \frac{1}{{\alpha}^{3}}\right)\right)}}{2.0}\]
    6. Simplified11.5

      \[\leadsto \frac{\frac{\beta}{\left(\alpha + \beta\right) + 2.0} - \color{blue}{\mathsf{fma}\left(\left(\frac{-1}{\alpha}\right), 2.0, \left(\mathsf{fma}\left(\left(\frac{8.0}{\alpha \cdot \alpha}\right), \left(\frac{-1}{\alpha}\right), \left(\frac{4.0}{\alpha \cdot \alpha}\right)\right)\right)\right)}}{2.0}\]

    if -0.9999439615156119 < (/ (- beta alpha) (+ (+ alpha beta) 2.0))

    1. Initial program 0.0

      \[\frac{\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2.0} + 1.0}{2.0}\]
    2. Using strategy rm
    3. Applied div-inv0.0

      \[\leadsto \frac{\color{blue}{\left(\beta - \alpha\right) \cdot \frac{1}{\left(\alpha + \beta\right) + 2.0}} + 1.0}{2.0}\]
    4. Applied fma-def0.0

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2.0} \le -0.9999439615156119:\\ \;\;\;\;\frac{\frac{\beta}{\left(\alpha + \beta\right) + 2.0} - \mathsf{fma}\left(\left(\frac{-1}{\alpha}\right), 2.0, \left(\mathsf{fma}\left(\left(\frac{8.0}{\alpha \cdot \alpha}\right), \left(\frac{-1}{\alpha}\right), \left(\frac{4.0}{\alpha \cdot \alpha}\right)\right)\right)\right)}{2.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{\mathsf{fma}\left(\left(\beta - \alpha\right), \left(\frac{1}{\left(\alpha + \beta\right) + 2.0}\right), 1.0\right)}{2.0}\\ \end{array}\]

Reproduce

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