Average Error: 0.2 → 0.2
Time: 29.2s
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\]
\[\left(\left(\left(1 - a \cdot 3\right) \cdot \left(b \cdot b\right) + \left(a + 1\right) \cdot \left(a \cdot a\right)\right) \cdot 4 + \mathsf{fma}\left(b \cdot b, b \cdot b, \left(\left(a \cdot a + \left(b \cdot b\right) \cdot 2\right) \cdot a\right) \cdot a\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
\left(\left(\left(1 - a \cdot 3\right) \cdot \left(b \cdot b\right) + \left(a + 1\right) \cdot \left(a \cdot a\right)\right) \cdot 4 + \mathsf{fma}\left(b \cdot b, b \cdot b, \left(\left(a \cdot a + \left(b \cdot b\right) \cdot 2\right) \cdot a\right) \cdot a\right)\right) - 1
double f(double a, double b) {
        double r5222932 = a;
        double r5222933 = r5222932 * r5222932;
        double r5222934 = b;
        double r5222935 = r5222934 * r5222934;
        double r5222936 = r5222933 + r5222935;
        double r5222937 = 2.0;
        double r5222938 = pow(r5222936, r5222937);
        double r5222939 = 4.0;
        double r5222940 = 1.0;
        double r5222941 = r5222940 + r5222932;
        double r5222942 = r5222933 * r5222941;
        double r5222943 = 3.0;
        double r5222944 = r5222943 * r5222932;
        double r5222945 = r5222940 - r5222944;
        double r5222946 = r5222935 * r5222945;
        double r5222947 = r5222942 + r5222946;
        double r5222948 = r5222939 * r5222947;
        double r5222949 = r5222938 + r5222948;
        double r5222950 = r5222949 - r5222940;
        return r5222950;
}

double f(double a, double b) {
        double r5222951 = 1.0;
        double r5222952 = a;
        double r5222953 = 3.0;
        double r5222954 = r5222952 * r5222953;
        double r5222955 = r5222951 - r5222954;
        double r5222956 = b;
        double r5222957 = r5222956 * r5222956;
        double r5222958 = r5222955 * r5222957;
        double r5222959 = r5222952 + r5222951;
        double r5222960 = r5222952 * r5222952;
        double r5222961 = r5222959 * r5222960;
        double r5222962 = r5222958 + r5222961;
        double r5222963 = 4.0;
        double r5222964 = r5222962 * r5222963;
        double r5222965 = 2.0;
        double r5222966 = r5222957 * r5222965;
        double r5222967 = r5222960 + r5222966;
        double r5222968 = r5222967 * r5222952;
        double r5222969 = r5222968 * r5222952;
        double r5222970 = fma(r5222957, r5222957, r5222969);
        double r5222971 = r5222964 + r5222970;
        double r5222972 = r5222971 - r5222951;
        return r5222972;
}

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. Taylor expanded around inf 0.0

    \[\leadsto \left(\color{blue}{\left({b}^{4} + \left({a}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right)\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\]
  3. Simplified0.2

    \[\leadsto \left(\color{blue}{\mathsf{fma}\left(b \cdot b, b \cdot b, \left(a \cdot a\right) \cdot \left(a \cdot a + \left(b \cdot b\right) \cdot 2\right)\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. Using strategy rm
  5. Applied associate-*l*0.2

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

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

Reproduce

herbie shell --seed 2019141 +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))