Average Error: 0.7 → 0.7
Time: 30.0s
Precision: 64
\[\alpha \gt \left(-1\right) \land \beta \gt \left(-1\right)\]
\[\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)}\]
\[\frac{\frac{1.0}{\frac{\left(\alpha + \beta\right) + 2.0}{\beta - \alpha}} + 1.0}{2.0}\]
\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)}
\frac{\frac{1.0}{\frac{\left(\alpha + \beta\right) + 2.0}{\beta - \alpha}} + 1.0}{2.0}
double f(double alpha, double beta) {
        double r3410944 = beta;
        double r3410945 = alpha;
        double r3410946 = r3410944 - r3410945;
        double r3410947 = r3410945 + r3410944;
        double r3410948 = 2.0;
        double r3410949 = /* ERROR: no posit support in C */;
        double r3410950 = r3410947 + r3410949;
        double r3410951 = r3410946 / r3410950;
        double r3410952 = 1.0;
        double r3410953 = /* ERROR: no posit support in C */;
        double r3410954 = r3410951 + r3410953;
        double r3410955 = r3410954 / r3410949;
        return r3410955;
}

double f(double alpha, double beta) {
        double r3410956 = 1.0;
        double r3410957 = alpha;
        double r3410958 = beta;
        double r3410959 = r3410957 + r3410958;
        double r3410960 = 2.0;
        double r3410961 = r3410959 + r3410960;
        double r3410962 = r3410958 - r3410957;
        double r3410963 = r3410961 / r3410962;
        double r3410964 = r3410956 / r3410963;
        double r3410965 = r3410964 + r3410956;
        double r3410966 = r3410965 / r3410960;
        return r3410966;
}

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 p16-*-un-lft-identity0.7

    \[\leadsto \frac{\left(\frac{\left(\frac{\color{blue}{\left(\left(1.0\right) \cdot \left(\beta - \alpha\right)\right)}}{\left(\frac{\left(\frac{\alpha}{\beta}\right)}{\left(2.0\right)}\right)}\right)}{\left(1.0\right)}\right)}{\left(2.0\right)}\]
  4. Applied associate-/l*0.7

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

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

Reproduce

herbie shell --seed 2019158 
(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)))