Average Error: 16.9 → 6.1
Time: 2.8m
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}\;\alpha \le 878066079060307.9:\\ \;\;\;\;\frac{\mathsf{fma}\left(\left(\beta - \alpha\right), \left(\frac{1}{2.0 + \left(\beta + \alpha\right)}\right), 1.0\right)}{2.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\beta}{2.0 + \left(\beta + \alpha\right)} - \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}\\ \end{array}\]
\frac{\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2.0} + 1.0}{2.0}
\begin{array}{l}
\mathbf{if}\;\alpha \le 878066079060307.9:\\
\;\;\;\;\frac{\mathsf{fma}\left(\left(\beta - \alpha\right), \left(\frac{1}{2.0 + \left(\beta + \alpha\right)}\right), 1.0\right)}{2.0}\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{\beta}{2.0 + \left(\beta + \alpha\right)} - \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}\\

\end{array}
double f(double alpha, double beta) {
        double r24986748 = beta;
        double r24986749 = alpha;
        double r24986750 = r24986748 - r24986749;
        double r24986751 = r24986749 + r24986748;
        double r24986752 = 2.0;
        double r24986753 = r24986751 + r24986752;
        double r24986754 = r24986750 / r24986753;
        double r24986755 = 1.0;
        double r24986756 = r24986754 + r24986755;
        double r24986757 = r24986756 / r24986752;
        return r24986757;
}

double f(double alpha, double beta) {
        double r24986758 = alpha;
        double r24986759 = 878066079060307.9;
        bool r24986760 = r24986758 <= r24986759;
        double r24986761 = beta;
        double r24986762 = r24986761 - r24986758;
        double r24986763 = 1.0;
        double r24986764 = 2.0;
        double r24986765 = r24986761 + r24986758;
        double r24986766 = r24986764 + r24986765;
        double r24986767 = r24986763 / r24986766;
        double r24986768 = 1.0;
        double r24986769 = fma(r24986762, r24986767, r24986768);
        double r24986770 = r24986769 / r24986764;
        double r24986771 = r24986761 / r24986766;
        double r24986772 = -1.0;
        double r24986773 = r24986772 / r24986758;
        double r24986774 = 8.0;
        double r24986775 = r24986758 * r24986758;
        double r24986776 = r24986774 / r24986775;
        double r24986777 = 4.0;
        double r24986778 = r24986777 / r24986775;
        double r24986779 = fma(r24986776, r24986773, r24986778);
        double r24986780 = fma(r24986773, r24986764, r24986779);
        double r24986781 = r24986771 - r24986780;
        double r24986782 = r24986781 / r24986764;
        double r24986783 = r24986760 ? r24986770 : r24986782;
        return r24986783;
}

Error

Bits error versus alpha

Bits error versus beta

Derivation

  1. Split input into 2 regimes
  2. if alpha < 878066079060307.9

    1. Initial program 0.3

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

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

      \[\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}\]

    if 878066079060307.9 < alpha

    1. Initial program 51.0

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

      \[\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-49.3

      \[\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 18.0

      \[\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. Simplified18.0

      \[\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}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification6.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;\alpha \le 878066079060307.9:\\ \;\;\;\;\frac{\mathsf{fma}\left(\left(\beta - \alpha\right), \left(\frac{1}{2.0 + \left(\beta + \alpha\right)}\right), 1.0\right)}{2.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\beta}{2.0 + \left(\beta + \alpha\right)} - \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}\\ \end{array}\]

Reproduce

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