\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.0} + 1.0}{2.0}\frac{\mathsf{fma}\left(\left(\frac{1}{\mathsf{fma}\left(2, i, \left(\alpha + \beta\right)\right)}\right), \left(\frac{\frac{\alpha + \beta}{2.0 + \mathsf{fma}\left(2, i, \left(\alpha + \beta\right)\right)}}{\frac{1}{\beta - \alpha}}\right), 1.0\right)}{2.0}double f(double alpha, double beta, double i) {
double r3747672 = alpha;
double r3747673 = beta;
double r3747674 = r3747672 + r3747673;
double r3747675 = r3747673 - r3747672;
double r3747676 = r3747674 * r3747675;
double r3747677 = 2.0;
double r3747678 = i;
double r3747679 = r3747677 * r3747678;
double r3747680 = r3747674 + r3747679;
double r3747681 = r3747676 / r3747680;
double r3747682 = 2.0;
double r3747683 = r3747680 + r3747682;
double r3747684 = r3747681 / r3747683;
double r3747685 = 1.0;
double r3747686 = r3747684 + r3747685;
double r3747687 = r3747686 / r3747682;
return r3747687;
}
double f(double alpha, double beta, double i) {
double r3747688 = 1.0;
double r3747689 = 2.0;
double r3747690 = i;
double r3747691 = alpha;
double r3747692 = beta;
double r3747693 = r3747691 + r3747692;
double r3747694 = fma(r3747689, r3747690, r3747693);
double r3747695 = r3747688 / r3747694;
double r3747696 = 2.0;
double r3747697 = r3747696 + r3747694;
double r3747698 = r3747693 / r3747697;
double r3747699 = r3747692 - r3747691;
double r3747700 = r3747688 / r3747699;
double r3747701 = r3747698 / r3747700;
double r3747702 = 1.0;
double r3747703 = fma(r3747695, r3747701, r3747702);
double r3747704 = r3747703 / r3747696;
return r3747704;
}



Bits error versus alpha



Bits error versus beta



Bits error versus i
Initial program 23.5
Simplified12.0
rmApplied div-inv12.0
rmApplied fma-udef12.0
Simplified12.0
rmApplied div-inv12.1
Applied *-un-lft-identity12.1
Applied times-frac12.0
Applied fma-def12.1
Final simplification12.1
herbie shell --seed 2019129 +o rules:numerics
(FPCore (alpha beta i)
:name "Octave 3.8, jcobi/2"
:pre (and (> alpha -1) (> beta -1) (> i 0))
(/ (+ (/ (/ (* (+ alpha beta) (- beta alpha)) (+ (+ alpha beta) (* 2 i))) (+ (+ (+ alpha beta) (* 2 i)) 2.0)) 1.0) 2.0))