\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 r54629 = atan2(1.0, 0.0);
double r54630 = 2.0;
double r54631 = r54629 / r54630;
double r54632 = 1.0;
double r54633 = b;
double r54634 = r54633 * r54633;
double r54635 = a;
double r54636 = r54635 * r54635;
double r54637 = r54634 - r54636;
double r54638 = r54632 / r54637;
double r54639 = r54631 * r54638;
double r54640 = r54632 / r54635;
double r54641 = r54632 / r54633;
double r54642 = r54640 - r54641;
double r54643 = r54639 * r54642;
return r54643;
}
double f(double a, double b) {
double r54644 = 1.0;
double r54645 = b;
double r54646 = a;
double r54647 = r54645 - r54646;
double r54648 = r54644 * r54647;
double r54649 = atan2(1.0, 0.0);
double r54650 = 2.0;
double r54651 = r54649 / r54650;
double r54652 = r54645 + r54646;
double r54653 = r54651 / r54652;
double r54654 = r54653 * r54644;
double r54655 = r54648 * r54654;
double r54656 = expm1(r54655);
double r54657 = log1p(r54656);
double r54658 = r54646 * r54645;
double r54659 = r54647 * r54658;
double r54660 = r54657 / r54659;
return r54660;
}



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))))