double f(double alpha, double beta, double i) {
double r2032234 = alpha;
double r2032235 = beta;
double r2032236 = r2032234 + r2032235;
double r2032237 = r2032235 - r2032234;
double r2032238 = r2032236 * r2032237;
double r2032239 = 2.0;
double r2032240 = i;
double r2032241 = r2032239 * r2032240;
double r2032242 = r2032236 + r2032241;
double r2032243 = r2032238 / r2032242;
double r2032244 = 2.0;
double r2032245 = r2032242 + r2032244;
double r2032246 = r2032243 / r2032245;
double r2032247 = 1.0;
double r2032248 = r2032246 + r2032247;
double r2032249 = r2032248 / r2032244;
return r2032249;
}
double f(double alpha, double beta, double i) {
double r2032250 = beta;
double r2032251 = alpha;
double r2032252 = r2032250 - r2032251;
double r2032253 = r2032250 + r2032251;
double r2032254 = 2.0;
double r2032255 = r2032251 + r2032254;
double r2032256 = r2032250 + r2032255;
double r2032257 = 2.0;
double r2032258 = i;
double r2032259 = r2032257 * r2032258;
double r2032260 = r2032256 + r2032259;
double r2032261 = r2032253 / r2032260;
double r2032262 = r2032252 * r2032261;
double r2032263 = r2032259 + r2032253;
double r2032264 = r2032262 / r2032263;
double r2032265 = 1.0;
double r2032266 = r2032264 + r2032265;
double r2032267 = r2032266 / r2032254;
return r2032267;
}
\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{\frac{\left(\beta - \alpha\right) \cdot \frac{\beta + \alpha}{\left(\beta + \left(\alpha + 2.0\right)\right) + 2 \cdot i}}{2 \cdot i + \left(\beta + \alpha\right)} + 1.0}{2.0}


Bits error versus alpha



Bits error versus beta



Bits error versus i
Initial program 0.9
Simplified1.0
rmApplied p16-times-frac0.6
rmApplied associate-*l/0.6
Final simplification0.6
herbie shell --seed 2019101 +o rules:numerics
(FPCore (alpha beta i)
:name "Octave 3.8, jcobi/2"
:pre (and (>.p16 alpha (real->posit16 -1)) (>.p16 beta (real->posit16 -1)) (>.p16 i (real->posit16 0)))
(/.p16 (+.p16 (/.p16 (/.p16 (*.p16 (+.p16 alpha beta) (-.p16 beta alpha)) (+.p16 (+.p16 alpha beta) (*.p16 (real->posit16 2) i))) (+.p16 (+.p16 (+.p16 alpha beta) (*.p16 (real->posit16 2) i)) (real->posit16 2.0))) (real->posit16 1.0)) (real->posit16 2.0)))