Average Error: 23.9 → 12.0
Time: 25.4s
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{1 + \frac{\frac{\beta - \alpha}{\mathsf{fma}\left(2, i, \alpha + \beta\right)}}{2 + \mathsf{fma}\left(2, i, \alpha + \beta\right)} \cdot \left(\alpha + \beta\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{1 + \frac{\frac{\beta - \alpha}{\mathsf{fma}\left(2, i, \alpha + \beta\right)}}{2 + \mathsf{fma}\left(2, i, \alpha + \beta\right)} \cdot \left(\alpha + \beta\right)}{2}
double f(double alpha, double beta, double i) {
        double r3791187 = alpha;
        double r3791188 = beta;
        double r3791189 = r3791187 + r3791188;
        double r3791190 = r3791188 - r3791187;
        double r3791191 = r3791189 * r3791190;
        double r3791192 = 2.0;
        double r3791193 = i;
        double r3791194 = r3791192 * r3791193;
        double r3791195 = r3791189 + r3791194;
        double r3791196 = r3791191 / r3791195;
        double r3791197 = r3791195 + r3791192;
        double r3791198 = r3791196 / r3791197;
        double r3791199 = 1.0;
        double r3791200 = r3791198 + r3791199;
        double r3791201 = r3791200 / r3791192;
        return r3791201;
}

double f(double alpha, double beta, double i) {
        double r3791202 = 1.0;
        double r3791203 = beta;
        double r3791204 = alpha;
        double r3791205 = r3791203 - r3791204;
        double r3791206 = 2.0;
        double r3791207 = i;
        double r3791208 = r3791204 + r3791203;
        double r3791209 = fma(r3791206, r3791207, r3791208);
        double r3791210 = r3791205 / r3791209;
        double r3791211 = r3791206 + r3791209;
        double r3791212 = r3791210 / r3791211;
        double r3791213 = r3791212 * r3791208;
        double r3791214 = r3791202 + r3791213;
        double r3791215 = r3791214 / r3791206;
        return r3791215;
}

Error

Bits error versus alpha

Bits error versus beta

Bits error versus i

Derivation

  1. Initial program 23.9

    \[\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.1

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

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

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

Reproduce

herbie shell --seed 2019192 +o rules:numerics
(FPCore (alpha beta i)
  :name "Octave 3.8, jcobi/2"
  :pre (and (> alpha -1.0) (> beta -1.0) (> i 0.0))
  (/ (+ (/ (/ (* (+ alpha beta) (- beta alpha)) (+ (+ alpha beta) (* 2.0 i))) (+ (+ (+ alpha beta) (* 2.0 i)) 2.0)) 1.0) 2.0))