Average Error: 0.7 → 0.7
Time: 18.4s
Precision: 64
\[\frac{\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2.0} + 1.0}{2.0}\]
\[\frac{\frac{\beta - \alpha}{\alpha + \left(\beta + 2.0\right)} + 1.0}{2.0}\]
double f(double alpha, double beta) {
        double r2207765 = beta;
        double r2207766 = alpha;
        double r2207767 = r2207765 - r2207766;
        double r2207768 = r2207766 + r2207765;
        double r2207769 = 2.0;
        double r2207770 = r2207768 + r2207769;
        double r2207771 = r2207767 / r2207770;
        double r2207772 = 1.0;
        double r2207773 = r2207771 + r2207772;
        double r2207774 = r2207773 / r2207769;
        return r2207774;
}

double f(double alpha, double beta) {
        double r2207775 = beta;
        double r2207776 = alpha;
        double r2207777 = r2207775 - r2207776;
        double r2207778 = 2.0;
        double r2207779 = r2207775 + r2207778;
        double r2207780 = r2207776 + r2207779;
        double r2207781 = r2207777 / r2207780;
        double r2207782 = 1.0;
        double r2207783 = r2207781 + r2207782;
        double r2207784 = r2207783 / r2207778;
        return r2207784;
}

\frac{\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2.0} + 1.0}{2.0}
\frac{\frac{\beta - \alpha}{\alpha + \left(\beta + 2.0\right)} + 1.0}{2.0}

Error

Bits error versus alpha

Bits error versus beta

Derivation

  1. Initial program 0.7

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

    \[\leadsto \frac{\left(\frac{\left(\frac{\left(\beta - \alpha\right)}{\color{blue}{\left(\frac{\alpha}{\left(\frac{\beta}{\left(2.0\right)}\right)}\right)}}\right)}{\left(1.0\right)}\right)}{\left(2.0\right)}\]
  4. Final simplification0.7

    \[\leadsto \frac{\frac{\beta - \alpha}{\alpha + \left(\beta + 2.0\right)} + 1.0}{2.0}\]

Reproduce

herbie shell --seed 2019102 
(FPCore (alpha beta)
  :name "Octave 3.8, jcobi/1"
  :pre (and (>.p16 alpha (real->posit16 -1)) (>.p16 beta (real->posit16 -1)))
  (/.p16 (+.p16 (/.p16 (-.p16 beta alpha) (+.p16 (+.p16 alpha beta) (real->posit16 2.0))) (real->posit16 1.0)) (real->posit16 2.0)))