Average Error: 3.3 → 3.3
Time: 51.0s
Precision: 64
\[\alpha \gt -1 \land \beta \gt -1\]
\[\frac{\frac{\frac{\left(\left(\alpha + \beta\right) + \beta \cdot \alpha\right) + 1.0}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\left(\alpha + \beta\right) + 2 \cdot 1\right) + 1.0}\]
\[\frac{\frac{\frac{1.0 + \left(\beta + \mathsf{fma}\left(\beta, \alpha, \alpha\right)\right)}{\left(\beta + \alpha\right) + 2}}{\left(\beta + \alpha\right) + 2}}{1.0 + \left(\left(\beta + \alpha\right) + 2\right)}\]
\frac{\frac{\frac{\left(\left(\alpha + \beta\right) + \beta \cdot \alpha\right) + 1.0}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\alpha + \beta\right) + 2 \cdot 1}}{\left(\left(\alpha + \beta\right) + 2 \cdot 1\right) + 1.0}
\frac{\frac{\frac{1.0 + \left(\beta + \mathsf{fma}\left(\beta, \alpha, \alpha\right)\right)}{\left(\beta + \alpha\right) + 2}}{\left(\beta + \alpha\right) + 2}}{1.0 + \left(\left(\beta + \alpha\right) + 2\right)}
double f(double alpha, double beta) {
        double r3164723 = alpha;
        double r3164724 = beta;
        double r3164725 = r3164723 + r3164724;
        double r3164726 = r3164724 * r3164723;
        double r3164727 = r3164725 + r3164726;
        double r3164728 = 1.0;
        double r3164729 = r3164727 + r3164728;
        double r3164730 = 2.0;
        double r3164731 = 1.0;
        double r3164732 = r3164730 * r3164731;
        double r3164733 = r3164725 + r3164732;
        double r3164734 = r3164729 / r3164733;
        double r3164735 = r3164734 / r3164733;
        double r3164736 = r3164733 + r3164728;
        double r3164737 = r3164735 / r3164736;
        return r3164737;
}

double f(double alpha, double beta) {
        double r3164738 = 1.0;
        double r3164739 = beta;
        double r3164740 = alpha;
        double r3164741 = fma(r3164739, r3164740, r3164740);
        double r3164742 = r3164739 + r3164741;
        double r3164743 = r3164738 + r3164742;
        double r3164744 = r3164739 + r3164740;
        double r3164745 = 2.0;
        double r3164746 = r3164744 + r3164745;
        double r3164747 = r3164743 / r3164746;
        double r3164748 = r3164747 / r3164746;
        double r3164749 = r3164738 + r3164746;
        double r3164750 = r3164748 / r3164749;
        return r3164750;
}

Error

Bits error versus alpha

Bits error versus beta

Derivation

  1. Initial program 3.3

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

    \[\leadsto \color{blue}{\frac{\frac{\frac{1.0 + \left(\beta + \mathsf{fma}\left(\beta, \alpha, \alpha\right)\right)}{2 + \left(\beta + \alpha\right)}}{2 + \left(\beta + \alpha\right)}}{\left(2 + \left(\beta + \alpha\right)\right) + 1.0}}\]
  3. Final simplification3.3

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

Reproduce

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