Average Error: 0.2 → 0.2
Time: 5.4s
Precision: 64
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]
\[\mathsf{fma}\left({\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, {\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]
\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1
\mathsf{fma}\left({\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, {\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1
double f(double a, double b) {
        double r344946 = a;
        double r344947 = r344946 * r344946;
        double r344948 = b;
        double r344949 = r344948 * r344948;
        double r344950 = r344947 + r344949;
        double r344951 = 2.0;
        double r344952 = pow(r344950, r344951);
        double r344953 = 4.0;
        double r344954 = 1.0;
        double r344955 = r344954 + r344946;
        double r344956 = r344947 * r344955;
        double r344957 = 3.0;
        double r344958 = r344957 * r344946;
        double r344959 = r344954 - r344958;
        double r344960 = r344949 * r344959;
        double r344961 = r344956 + r344960;
        double r344962 = r344953 * r344961;
        double r344963 = r344952 + r344962;
        double r344964 = r344963 - r344954;
        return r344964;
}

double f(double a, double b) {
        double r344965 = a;
        double r344966 = r344965 * r344965;
        double r344967 = b;
        double r344968 = r344967 * r344967;
        double r344969 = r344966 + r344968;
        double r344970 = 2.0;
        double r344971 = 2.0;
        double r344972 = r344970 / r344971;
        double r344973 = pow(r344969, r344972);
        double r344974 = 4.0;
        double r344975 = 1.0;
        double r344976 = r344975 + r344965;
        double r344977 = r344966 * r344976;
        double r344978 = 3.0;
        double r344979 = r344978 * r344965;
        double r344980 = r344975 - r344979;
        double r344981 = r344968 * r344980;
        double r344982 = r344977 + r344981;
        double r344983 = r344974 * r344982;
        double r344984 = fma(r344973, r344973, r344983);
        double r344985 = r344984 - r344975;
        return r344985;
}

Error

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 0.2

    \[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]
  2. Using strategy rm
  3. Applied sqr-pow0.2

    \[\leadsto \left(\color{blue}{{\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)} \cdot {\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]
  4. Applied fma-def0.2

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

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

Reproduce

herbie shell --seed 2020002 +o rules:numerics
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (25)"
  :precision binary64
  (- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (+ (* (* a a) (+ 1 a)) (* (* b b) (- 1 (* 3 a)))))) 1))