Average Error: 13.9 → 0.3
Time: 51.7s
Precision: 64
\[\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{fma}\left(\frac{1}{\left(b + a\right) \cdot 2} \cdot \pi, \frac{-1}{b}, \frac{\frac{\pi}{\left(b + a\right) \cdot 2}}{a}\right)}{b - a}\]
\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{fma}\left(\frac{1}{\left(b + a\right) \cdot 2} \cdot \pi, \frac{-1}{b}, \frac{\frac{\pi}{\left(b + a\right) \cdot 2}}{a}\right)}{b - a}
double f(double a, double b) {
        double r2094860 = atan2(1.0, 0.0);
        double r2094861 = 2.0;
        double r2094862 = r2094860 / r2094861;
        double r2094863 = 1.0;
        double r2094864 = b;
        double r2094865 = r2094864 * r2094864;
        double r2094866 = a;
        double r2094867 = r2094866 * r2094866;
        double r2094868 = r2094865 - r2094867;
        double r2094869 = r2094863 / r2094868;
        double r2094870 = r2094862 * r2094869;
        double r2094871 = r2094863 / r2094866;
        double r2094872 = r2094863 / r2094864;
        double r2094873 = r2094871 - r2094872;
        double r2094874 = r2094870 * r2094873;
        return r2094874;
}

double f(double a, double b) {
        double r2094875 = 1.0;
        double r2094876 = b;
        double r2094877 = a;
        double r2094878 = r2094876 + r2094877;
        double r2094879 = 2.0;
        double r2094880 = r2094878 * r2094879;
        double r2094881 = r2094875 / r2094880;
        double r2094882 = atan2(1.0, 0.0);
        double r2094883 = r2094881 * r2094882;
        double r2094884 = -1.0;
        double r2094885 = r2094884 / r2094876;
        double r2094886 = r2094882 / r2094880;
        double r2094887 = r2094886 / r2094877;
        double r2094888 = fma(r2094883, r2094885, r2094887);
        double r2094889 = r2094876 - r2094877;
        double r2094890 = r2094888 / r2094889;
        return r2094890;
}

Error

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 13.9

    \[\left(\frac{\pi}{2} \cdot \frac{1}{b \cdot b - a \cdot a}\right) \cdot \left(\frac{1}{a} - \frac{1}{b}\right)\]
  2. Simplified0.3

    \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(\frac{\pi}{\left(a + b\right) \cdot 2}, \frac{-1}{b}, \frac{\frac{\pi}{\left(a + b\right) \cdot 2}}{a}\right)}{b - a}}\]
  3. Using strategy rm
  4. Applied div-inv0.3

    \[\leadsto \frac{\mathsf{fma}\left(\color{blue}{\pi \cdot \frac{1}{\left(a + b\right) \cdot 2}}, \frac{-1}{b}, \frac{\frac{\pi}{\left(a + b\right) \cdot 2}}{a}\right)}{b - a}\]
  5. Final simplification0.3

    \[\leadsto \frac{\mathsf{fma}\left(\frac{1}{\left(b + a\right) \cdot 2} \cdot \pi, \frac{-1}{b}, \frac{\frac{\pi}{\left(b + a\right) \cdot 2}}{a}\right)}{b - a}\]

Reproduce

herbie shell --seed 2019143 +o rules:numerics
(FPCore (a b)
  :name "NMSE Section 6.1 mentioned, B"
  (* (* (/ PI 2) (/ 1 (- (* b b) (* a a)))) (- (/ 1 a) (/ 1 b))))