\left(\frac{\pi}{2} \cdot \frac{1}{b \cdot b - a \cdot a}\right) \cdot \left(\frac{1}{a} - \frac{1}{b}\right)\frac{\mathsf{log1p}\left(\mathsf{expm1}\left(\left(1 \cdot \left(b - a\right)\right) \cdot \left(\frac{\frac{\pi}{2}}{b + a} \cdot 1\right)\right)\right)}{\left(b - a\right) \cdot \left(a \cdot b\right)}double f(double a, double b) {
double r49295 = atan2(1.0, 0.0);
double r49296 = 2.0;
double r49297 = r49295 / r49296;
double r49298 = 1.0;
double r49299 = b;
double r49300 = r49299 * r49299;
double r49301 = a;
double r49302 = r49301 * r49301;
double r49303 = r49300 - r49302;
double r49304 = r49298 / r49303;
double r49305 = r49297 * r49304;
double r49306 = r49298 / r49301;
double r49307 = r49298 / r49299;
double r49308 = r49306 - r49307;
double r49309 = r49305 * r49308;
return r49309;
}
double f(double a, double b) {
double r49310 = 1.0;
double r49311 = b;
double r49312 = a;
double r49313 = r49311 - r49312;
double r49314 = r49310 * r49313;
double r49315 = atan2(1.0, 0.0);
double r49316 = 2.0;
double r49317 = r49315 / r49316;
double r49318 = r49311 + r49312;
double r49319 = r49317 / r49318;
double r49320 = r49319 * r49310;
double r49321 = r49314 * r49320;
double r49322 = expm1(r49321);
double r49323 = log1p(r49322);
double r49324 = r49312 * r49311;
double r49325 = r49313 * r49324;
double r49326 = r49323 / r49325;
return r49326;
}



Bits error versus a



Bits error versus b
Results
Initial program 14.5
rmApplied difference-of-squares9.8
Applied *-un-lft-identity9.8
Applied times-frac9.3
Applied associate-*r*9.3
Simplified9.3
rmApplied associate-*r/9.2
Applied associate-*l/0.3
rmApplied frac-sub0.3
Applied associate-*r/0.3
Applied associate-/l/0.8
rmApplied log1p-expm1-u0.8
Simplified0.8
Final simplification0.8
herbie shell --seed 2019325 +o rules:numerics
(FPCore (a b)
:name "NMSE Section 6.1 mentioned, B"
:precision binary64
(* (* (/ PI 2) (/ 1 (- (* b b) (* a a)))) (- (/ 1 a) (/ 1 b))))