Average Error: 0.7 → 0.7
Time: 18.7s
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 r2203971 = beta;
        double r2203972 = alpha;
        double r2203973 = r2203971 - r2203972;
        double r2203974 = r2203972 + r2203971;
        double r2203975 = 2.0;
        double r2203976 = r2203974 + r2203975;
        double r2203977 = r2203973 / r2203976;
        double r2203978 = 1.0;
        double r2203979 = r2203977 + r2203978;
        double r2203980 = r2203979 / r2203975;
        return r2203980;
}

double f(double alpha, double beta) {
        double r2203981 = beta;
        double r2203982 = alpha;
        double r2203983 = r2203981 - r2203982;
        double r2203984 = 2.0;
        double r2203985 = r2203981 + r2203984;
        double r2203986 = r2203982 + r2203985;
        double r2203987 = r2203983 / r2203986;
        double r2203988 = 1.0;
        double r2203989 = r2203987 + r2203988;
        double r2203990 = r2203989 / r2203984;
        return r2203990;
}

\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 +o rules:numerics
(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)))