Average Error: 0.2 → 0.2
Time: 20.3s
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(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\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(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1
double f(double a, double b) {
        double r158235 = a;
        double r158236 = r158235 * r158235;
        double r158237 = b;
        double r158238 = r158237 * r158237;
        double r158239 = r158236 + r158238;
        double r158240 = 2.0;
        double r158241 = pow(r158239, r158240);
        double r158242 = 4.0;
        double r158243 = 1.0;
        double r158244 = r158243 + r158235;
        double r158245 = r158236 * r158244;
        double r158246 = 3.0;
        double r158247 = r158246 * r158235;
        double r158248 = r158243 - r158247;
        double r158249 = r158238 * r158248;
        double r158250 = r158245 + r158249;
        double r158251 = r158242 * r158250;
        double r158252 = r158241 + r158251;
        double r158253 = r158252 - r158243;
        return r158253;
}

double f(double a, double b) {
        double r158254 = 4.0;
        double r158255 = a;
        double r158256 = r158255 * r158255;
        double r158257 = 1.0;
        double r158258 = r158257 + r158255;
        double r158259 = b;
        double r158260 = r158259 * r158259;
        double r158261 = 3.0;
        double r158262 = r158261 * r158255;
        double r158263 = r158257 - r158262;
        double r158264 = r158260 * r158263;
        double r158265 = fma(r158256, r158258, r158264);
        double r158266 = fma(r158255, r158255, r158260);
        double r158267 = 2.0;
        double r158268 = pow(r158266, r158267);
        double r158269 = fma(r158254, r158265, r158268);
        double r158270 = r158269 - r158257;
        return r158270;
}

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. Simplified0.2

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

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

Reproduce

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