Average Error: 0.2 → 0.2
Time: 1.1m
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({\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2}\right), \left({\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2}\right), \left(4 \cdot \left(\left(a + 1\right) \cdot \left(a \cdot a\right) + \left(1 - 3 \cdot a\right) \cdot \left(b \cdot b\right)\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({\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2}\right), \left({\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2}\right), \left(4 \cdot \left(\left(a + 1\right) \cdot \left(a \cdot a\right) + \left(1 - 3 \cdot a\right) \cdot \left(b \cdot b\right)\right)\right)\right) - 1
double f(double a, double b) {
        double r34885935 = a;
        double r34885936 = r34885935 * r34885935;
        double r34885937 = b;
        double r34885938 = r34885937 * r34885937;
        double r34885939 = r34885936 + r34885938;
        double r34885940 = 2.0;
        double r34885941 = pow(r34885939, r34885940);
        double r34885942 = 4.0;
        double r34885943 = 1.0;
        double r34885944 = r34885943 + r34885935;
        double r34885945 = r34885936 * r34885944;
        double r34885946 = 3.0;
        double r34885947 = r34885946 * r34885935;
        double r34885948 = r34885943 - r34885947;
        double r34885949 = r34885938 * r34885948;
        double r34885950 = r34885945 + r34885949;
        double r34885951 = r34885942 * r34885950;
        double r34885952 = r34885941 + r34885951;
        double r34885953 = r34885952 - r34885943;
        return r34885953;
}

double f(double a, double b) {
        double r34885954 = a;
        double r34885955 = r34885954 * r34885954;
        double r34885956 = b;
        double r34885957 = r34885956 * r34885956;
        double r34885958 = r34885955 + r34885957;
        double r34885959 = sqrt(r34885958);
        double r34885960 = 2.0;
        double r34885961 = pow(r34885959, r34885960);
        double r34885962 = 4.0;
        double r34885963 = 1.0;
        double r34885964 = r34885954 + r34885963;
        double r34885965 = r34885964 * r34885955;
        double r34885966 = 3.0;
        double r34885967 = r34885966 * r34885954;
        double r34885968 = r34885963 - r34885967;
        double r34885969 = r34885968 * r34885957;
        double r34885970 = r34885965 + r34885969;
        double r34885971 = r34885962 * r34885970;
        double r34885972 = fma(r34885961, r34885961, r34885971);
        double r34885973 = r34885972 - r34885963;
        return r34885973;
}

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 add-sqr-sqrt0.2

    \[\leadsto \left({\color{blue}{\left(\sqrt{a \cdot a + b \cdot b} \cdot \sqrt{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\]
  4. Applied unpow-prod-down0.2

    \[\leadsto \left(\color{blue}{{\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2} \cdot {\left(\sqrt{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\]
  5. Applied fma-def0.2

    \[\leadsto \color{blue}{\mathsf{fma}\left(\left({\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2}\right), \left({\left(\sqrt{a \cdot a + b \cdot b}\right)}^{2}\right), \left(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)\right)} - 1\]
  6. Final simplification0.2

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

Reproduce

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