\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}, \log \left(e^{\frac{\alpha + \beta}{\mathsf{fma}\left(2, i, \alpha + \beta\right)}}\right), 1\right)}{2}double f(double alpha, double beta, double i) {
double r70082 = alpha;
double r70083 = beta;
double r70084 = r70082 + r70083;
double r70085 = r70083 - r70082;
double r70086 = r70084 * r70085;
double r70087 = 2.0;
double r70088 = i;
double r70089 = r70087 * r70088;
double r70090 = r70084 + r70089;
double r70091 = r70086 / r70090;
double r70092 = r70090 + r70087;
double r70093 = r70091 / r70092;
double r70094 = 1.0;
double r70095 = r70093 + r70094;
double r70096 = r70095 / r70087;
return r70096;
}
double f(double alpha, double beta, double i) {
double r70097 = beta;
double r70098 = alpha;
double r70099 = r70097 - r70098;
double r70100 = 2.0;
double r70101 = i;
double r70102 = r70098 + r70097;
double r70103 = fma(r70100, r70101, r70102);
double r70104 = r70103 + r70100;
double r70105 = r70099 / r70104;
double r70106 = r70102 / r70103;
double r70107 = exp(r70106);
double r70108 = log(r70107);
double r70109 = 1.0;
double r70110 = fma(r70105, r70108, r70109);
double r70111 = r70110 / r70100;
return r70111;
}



Bits error versus alpha



Bits error versus beta



Bits error versus i
Initial program 23.2
Simplified11.9
rmApplied add-log-exp11.9
rmApplied add-log-exp11.9
rmApplied rem-log-exp11.9
Final simplification11.9
herbie shell --seed 2019235 +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))