Average Error: 0.2 → 0.2
Time: 30.1s
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 r113503 = a;
        double r113504 = r113503 * r113503;
        double r113505 = b;
        double r113506 = r113505 * r113505;
        double r113507 = r113504 + r113506;
        double r113508 = 2.0;
        double r113509 = pow(r113507, r113508);
        double r113510 = 4.0;
        double r113511 = 1.0;
        double r113512 = r113511 + r113503;
        double r113513 = r113504 * r113512;
        double r113514 = 3.0;
        double r113515 = r113514 * r113503;
        double r113516 = r113511 - r113515;
        double r113517 = r113506 * r113516;
        double r113518 = r113513 + r113517;
        double r113519 = r113510 * r113518;
        double r113520 = r113509 + r113519;
        double r113521 = r113520 - r113511;
        return r113521;
}

double f(double a, double b) {
        double r113522 = 4.0;
        double r113523 = a;
        double r113524 = r113523 * r113523;
        double r113525 = 1.0;
        double r113526 = r113525 + r113523;
        double r113527 = b;
        double r113528 = r113527 * r113527;
        double r113529 = 3.0;
        double r113530 = r113529 * r113523;
        double r113531 = r113525 - r113530;
        double r113532 = r113528 * r113531;
        double r113533 = fma(r113524, r113526, r113532);
        double r113534 = fma(r113523, r113523, r113528);
        double r113535 = 2.0;
        double r113536 = pow(r113534, r113535);
        double r113537 = fma(r113522, r113533, r113536);
        double r113538 = r113537 - r113525;
        return r113538;
}

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