Average Error: 0.2 → 0.2
Time: 5.6s
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(3 + a\right)\right)\right) - 1\]
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + \left(\sqrt[3]{4} \cdot \sqrt[3]{4}\right) \cdot \left(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right) \cdot \sqrt[3]{4}\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(3 + a\right)\right)\right) - 1
\left({\left(a \cdot a + b \cdot b\right)}^{2} + \left(\sqrt[3]{4} \cdot \sqrt[3]{4}\right) \cdot \left(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right) \cdot \sqrt[3]{4}\right)\right) - 1
double f(double a, double b) {
        double r375049 = a;
        double r375050 = r375049 * r375049;
        double r375051 = b;
        double r375052 = r375051 * r375051;
        double r375053 = r375050 + r375052;
        double r375054 = 2.0;
        double r375055 = pow(r375053, r375054);
        double r375056 = 4.0;
        double r375057 = 1.0;
        double r375058 = r375057 - r375049;
        double r375059 = r375050 * r375058;
        double r375060 = 3.0;
        double r375061 = r375060 + r375049;
        double r375062 = r375052 * r375061;
        double r375063 = r375059 + r375062;
        double r375064 = r375056 * r375063;
        double r375065 = r375055 + r375064;
        double r375066 = r375065 - r375057;
        return r375066;
}

double f(double a, double b) {
        double r375067 = a;
        double r375068 = r375067 * r375067;
        double r375069 = b;
        double r375070 = r375069 * r375069;
        double r375071 = r375068 + r375070;
        double r375072 = 2.0;
        double r375073 = pow(r375071, r375072);
        double r375074 = 4.0;
        double r375075 = cbrt(r375074);
        double r375076 = r375075 * r375075;
        double r375077 = 1.0;
        double r375078 = r375077 - r375067;
        double r375079 = 3.0;
        double r375080 = r375079 + r375067;
        double r375081 = r375070 * r375080;
        double r375082 = fma(r375068, r375078, r375081);
        double r375083 = r375082 * r375075;
        double r375084 = r375076 * r375083;
        double r375085 = r375073 + r375084;
        double r375086 = r375085 - r375077;
        return r375086;
}

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(3 + a\right)\right)\right) - 1\]
  2. Using strategy rm
  3. Applied add-cube-cbrt0.2

    \[\leadsto \left({\left(a \cdot a + b \cdot b\right)}^{2} + \color{blue}{\left(\left(\sqrt[3]{4} \cdot \sqrt[3]{4}\right) \cdot \sqrt[3]{4}\right)} \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1\]
  4. Applied associate-*l*0.2

    \[\leadsto \left({\left(a \cdot a + b \cdot b\right)}^{2} + \color{blue}{\left(\sqrt[3]{4} \cdot \sqrt[3]{4}\right) \cdot \left(\sqrt[3]{4} \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right)}\right) - 1\]
  5. Simplified0.2

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

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

Reproduce

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