Average Error: 0.2 → 0.2
Time: 29.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(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 r117405 = a;
        double r117406 = r117405 * r117405;
        double r117407 = b;
        double r117408 = r117407 * r117407;
        double r117409 = r117406 + r117408;
        double r117410 = 2.0;
        double r117411 = pow(r117409, r117410);
        double r117412 = 4.0;
        double r117413 = 1.0;
        double r117414 = r117413 + r117405;
        double r117415 = r117406 * r117414;
        double r117416 = 3.0;
        double r117417 = r117416 * r117405;
        double r117418 = r117413 - r117417;
        double r117419 = r117408 * r117418;
        double r117420 = r117415 + r117419;
        double r117421 = r117412 * r117420;
        double r117422 = r117411 + r117421;
        double r117423 = r117422 - r117413;
        return r117423;
}

double f(double a, double b) {
        double r117424 = 4.0;
        double r117425 = a;
        double r117426 = r117425 * r117425;
        double r117427 = 1.0;
        double r117428 = r117427 + r117425;
        double r117429 = b;
        double r117430 = r117429 * r117429;
        double r117431 = 3.0;
        double r117432 = r117431 * r117425;
        double r117433 = r117427 - r117432;
        double r117434 = r117430 * r117433;
        double r117435 = fma(r117426, r117428, r117434);
        double r117436 = fma(r117425, r117425, r117430);
        double r117437 = 2.0;
        double r117438 = pow(r117436, r117437);
        double r117439 = fma(r117424, r117435, r117438);
        double r117440 = r117439 - r117427;
        return r117440;
}

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 2019325 +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))