Average Error: 24.2 → 12.5
Time: 11.6s
Precision: 64
\[\alpha \gt -1 \land \beta \gt -1 \land i \gt 0.0\]
\[\frac{\frac{\frac{\left(\alpha + \beta\right) \cdot \left(\beta - \alpha\right)}{\left(\alpha + \beta\right) + 2 \cdot i}}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) + 2} + 1}{2}\]
\[\frac{\frac{\frac{\alpha + \beta}{\frac{\mathsf{fma}\left(i, 2, \alpha + \beta\right)}{\beta - \alpha}}}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) + 2} + 1}{2}\]
\frac{\frac{\frac{\left(\alpha + \beta\right) \cdot \left(\beta - \alpha\right)}{\left(\alpha + \beta\right) + 2 \cdot i}}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) + 2} + 1}{2}
\frac{\frac{\frac{\alpha + \beta}{\frac{\mathsf{fma}\left(i, 2, \alpha + \beta\right)}{\beta - \alpha}}}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) + 2} + 1}{2}
double f(double alpha, double beta, double i) {
        double r102835 = alpha;
        double r102836 = beta;
        double r102837 = r102835 + r102836;
        double r102838 = r102836 - r102835;
        double r102839 = r102837 * r102838;
        double r102840 = 2.0;
        double r102841 = i;
        double r102842 = r102840 * r102841;
        double r102843 = r102837 + r102842;
        double r102844 = r102839 / r102843;
        double r102845 = r102843 + r102840;
        double r102846 = r102844 / r102845;
        double r102847 = 1.0;
        double r102848 = r102846 + r102847;
        double r102849 = r102848 / r102840;
        return r102849;
}

double f(double alpha, double beta, double i) {
        double r102850 = alpha;
        double r102851 = beta;
        double r102852 = r102850 + r102851;
        double r102853 = i;
        double r102854 = 2.0;
        double r102855 = fma(r102853, r102854, r102852);
        double r102856 = r102851 - r102850;
        double r102857 = r102855 / r102856;
        double r102858 = r102852 / r102857;
        double r102859 = r102854 * r102853;
        double r102860 = r102852 + r102859;
        double r102861 = r102860 + r102854;
        double r102862 = r102858 / r102861;
        double r102863 = 1.0;
        double r102864 = r102862 + r102863;
        double r102865 = r102864 / r102854;
        return r102865;
}

Error

Bits error versus alpha

Bits error versus beta

Bits error versus i

Derivation

  1. Initial program 24.2

    \[\frac{\frac{\frac{\left(\alpha + \beta\right) \cdot \left(\beta - \alpha\right)}{\left(\alpha + \beta\right) + 2 \cdot i}}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) + 2} + 1}{2}\]
  2. Using strategy rm
  3. Applied associate-/l*12.5

    \[\leadsto \frac{\frac{\color{blue}{\frac{\alpha + \beta}{\frac{\left(\alpha + \beta\right) + 2 \cdot i}{\beta - \alpha}}}}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) + 2} + 1}{2}\]
  4. Simplified12.5

    \[\leadsto \frac{\frac{\frac{\alpha + \beta}{\color{blue}{\frac{\mathsf{fma}\left(i, 2, \alpha + \beta\right)}{\beta - \alpha}}}}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) + 2} + 1}{2}\]
  5. Final simplification12.5

    \[\leadsto \frac{\frac{\frac{\alpha + \beta}{\frac{\mathsf{fma}\left(i, 2, \alpha + \beta\right)}{\beta - \alpha}}}{\left(\left(\alpha + \beta\right) + 2 \cdot i\right) + 2} + 1}{2}\]

Reproduce

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