Average Error: 15.8 → 6.0
Time: 2.5m
Precision: 64
\[\frac{\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2.0} + 1.0}{2.0}\]
\[\begin{array}{l} \mathbf{if}\;\alpha \le 1205934218818.488:\\ \;\;\;\;\frac{(\left(\beta - \alpha\right) \cdot \left(\frac{1}{2.0 + \left(\beta + \alpha\right)}\right) + 1.0)_*}{2.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\beta}{2.0 + \left(\beta + \alpha\right)} - \left(\frac{4.0}{\alpha \cdot \alpha} - \left(\frac{2.0}{\alpha} + \frac{\frac{8.0}{\alpha \cdot \alpha}}{\alpha}\right)\right)}{2.0}\\ \end{array}\]
double f(double alpha, double beta) {
        double r5904191 = beta;
        double r5904192 = alpha;
        double r5904193 = r5904191 - r5904192;
        double r5904194 = r5904192 + r5904191;
        double r5904195 = 2.0;
        double r5904196 = r5904194 + r5904195;
        double r5904197 = r5904193 / r5904196;
        double r5904198 = 1.0;
        double r5904199 = r5904197 + r5904198;
        double r5904200 = r5904199 / r5904195;
        return r5904200;
}

double f(double alpha, double beta) {
        double r5904201 = alpha;
        double r5904202 = 1205934218818.488;
        bool r5904203 = r5904201 <= r5904202;
        double r5904204 = beta;
        double r5904205 = r5904204 - r5904201;
        double r5904206 = 1.0;
        double r5904207 = 2.0;
        double r5904208 = r5904204 + r5904201;
        double r5904209 = r5904207 + r5904208;
        double r5904210 = r5904206 / r5904209;
        double r5904211 = 1.0;
        double r5904212 = fma(r5904205, r5904210, r5904211);
        double r5904213 = r5904212 / r5904207;
        double r5904214 = r5904204 / r5904209;
        double r5904215 = 4.0;
        double r5904216 = r5904201 * r5904201;
        double r5904217 = r5904215 / r5904216;
        double r5904218 = r5904207 / r5904201;
        double r5904219 = 8.0;
        double r5904220 = r5904219 / r5904216;
        double r5904221 = r5904220 / r5904201;
        double r5904222 = r5904218 + r5904221;
        double r5904223 = r5904217 - r5904222;
        double r5904224 = r5904214 - r5904223;
        double r5904225 = r5904224 / r5904207;
        double r5904226 = r5904203 ? r5904213 : r5904225;
        return r5904226;
}

\frac{\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2.0} + 1.0}{2.0}
\begin{array}{l}
\mathbf{if}\;\alpha \le 1205934218818.488:\\
\;\;\;\;\frac{(\left(\beta - \alpha\right) \cdot \left(\frac{1}{2.0 + \left(\beta + \alpha\right)}\right) + 1.0)_*}{2.0}\\

\mathbf{else}:\\
\;\;\;\;\frac{\frac{\beta}{2.0 + \left(\beta + \alpha\right)} - \left(\frac{4.0}{\alpha \cdot \alpha} - \left(\frac{2.0}{\alpha} + \frac{\frac{8.0}{\alpha \cdot \alpha}}{\alpha}\right)\right)}{2.0}\\

\end{array}

Error

Bits error versus alpha

Bits error versus beta

Derivation

  1. Split input into 2 regimes
  2. if alpha < 1205934218818.488

    1. Initial program 0.2

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

      \[\leadsto \frac{\color{blue}{\left(\beta - \alpha\right) \cdot \frac{1}{\left(\alpha + \beta\right) + 2.0}} + 1.0}{2.0}\]
    4. Applied fma-def0.2

      \[\leadsto \frac{\color{blue}{(\left(\beta - \alpha\right) \cdot \left(\frac{1}{\left(\alpha + \beta\right) + 2.0}\right) + 1.0)_*}}{2.0}\]

    if 1205934218818.488 < alpha

    1. Initial program 49.4

      \[\frac{\frac{\beta - \alpha}{\left(\alpha + \beta\right) + 2.0} + 1.0}{2.0}\]
    2. Using strategy rm
    3. Applied div-sub49.4

      \[\leadsto \frac{\color{blue}{\left(\frac{\beta}{\left(\alpha + \beta\right) + 2.0} - \frac{\alpha}{\left(\alpha + \beta\right) + 2.0}\right)} + 1.0}{2.0}\]
    4. Applied associate-+l-47.9

      \[\leadsto \frac{\color{blue}{\frac{\beta}{\left(\alpha + \beta\right) + 2.0} - \left(\frac{\alpha}{\left(\alpha + \beta\right) + 2.0} - 1.0\right)}}{2.0}\]
    5. Taylor expanded around -inf 18.4

      \[\leadsto \frac{\frac{\beta}{\left(\alpha + \beta\right) + 2.0} - \color{blue}{\left(4.0 \cdot \frac{1}{{\alpha}^{2}} - \left(2.0 \cdot \frac{1}{\alpha} + 8.0 \cdot \frac{1}{{\alpha}^{3}}\right)\right)}}{2.0}\]
    6. Simplified18.4

      \[\leadsto \frac{\frac{\beta}{\left(\alpha + \beta\right) + 2.0} - \color{blue}{\left(\frac{4.0}{\alpha \cdot \alpha} - \left(\frac{\frac{8.0}{\alpha \cdot \alpha}}{\alpha} + \frac{2.0}{\alpha}\right)\right)}}{2.0}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification6.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;\alpha \le 1205934218818.488:\\ \;\;\;\;\frac{(\left(\beta - \alpha\right) \cdot \left(\frac{1}{2.0 + \left(\beta + \alpha\right)}\right) + 1.0)_*}{2.0}\\ \mathbf{else}:\\ \;\;\;\;\frac{\frac{\beta}{2.0 + \left(\beta + \alpha\right)} - \left(\frac{4.0}{\alpha \cdot \alpha} - \left(\frac{2.0}{\alpha} + \frac{\frac{8.0}{\alpha \cdot \alpha}}{\alpha}\right)\right)}{2.0}\\ \end{array}\]

Reproduce

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