Average Error: 24.1 → 12.4
Time: 20.9s
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{\mathsf{fma}\left(\frac{\beta - \alpha}{\mathsf{fma}\left(2, i, \alpha + \beta\right) + 2}, \left(\alpha + \beta\right) \cdot \frac{1}{\mathsf{fma}\left(2, i, \alpha + \beta\right)}, 1\right)}{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{\mathsf{fma}\left(\frac{\beta - \alpha}{\mathsf{fma}\left(2, i, \alpha + \beta\right) + 2}, \left(\alpha + \beta\right) \cdot \frac{1}{\mathsf{fma}\left(2, i, \alpha + \beta\right)}, 1\right)}{2}
double f(double alpha, double beta, double i) {
        double r73381 = alpha;
        double r73382 = beta;
        double r73383 = r73381 + r73382;
        double r73384 = r73382 - r73381;
        double r73385 = r73383 * r73384;
        double r73386 = 2.0;
        double r73387 = i;
        double r73388 = r73386 * r73387;
        double r73389 = r73383 + r73388;
        double r73390 = r73385 / r73389;
        double r73391 = r73389 + r73386;
        double r73392 = r73390 / r73391;
        double r73393 = 1.0;
        double r73394 = r73392 + r73393;
        double r73395 = r73394 / r73386;
        return r73395;
}

double f(double alpha, double beta, double i) {
        double r73396 = beta;
        double r73397 = alpha;
        double r73398 = r73396 - r73397;
        double r73399 = 2.0;
        double r73400 = i;
        double r73401 = r73397 + r73396;
        double r73402 = fma(r73399, r73400, r73401);
        double r73403 = r73402 + r73399;
        double r73404 = r73398 / r73403;
        double r73405 = 1.0;
        double r73406 = r73405 / r73402;
        double r73407 = r73401 * r73406;
        double r73408 = 1.0;
        double r73409 = fma(r73404, r73407, r73408);
        double r73410 = r73409 / r73399;
        return r73410;
}

Error

Bits error versus alpha

Bits error versus beta

Bits error versus i

Derivation

  1. Initial program 24.1

    \[\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. Simplified12.4

    \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(\frac{\beta - \alpha}{\mathsf{fma}\left(2, i, \alpha + \beta\right) + 2}, \frac{\alpha + \beta}{\mathsf{fma}\left(2, i, \alpha + \beta\right)}, 1\right)}{2}}\]
  3. Using strategy rm
  4. Applied div-inv12.4

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

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

Reproduce

herbie shell --seed 2019306 +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))