Average Error: 0.2 → 0.2
Time: 25.8s
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(\mathsf{fma}\left(\mathsf{fma}\left(a, a, a\right), a, \mathsf{fma}\left(a \cdot -3, b \cdot b, b \cdot b\right)\right), 4, \mathsf{fma}\left(\mathsf{fma}\left(a, a, b \cdot b\right), \mathsf{fma}\left(a, a, b \cdot b\right), -1\right)\right)\]
\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(\mathsf{fma}\left(\mathsf{fma}\left(a, a, a\right), a, \mathsf{fma}\left(a \cdot -3, b \cdot b, b \cdot b\right)\right), 4, \mathsf{fma}\left(\mathsf{fma}\left(a, a, b \cdot b\right), \mathsf{fma}\left(a, a, b \cdot b\right), -1\right)\right)
double f(double a, double b) {
        double r5049597 = a;
        double r5049598 = r5049597 * r5049597;
        double r5049599 = b;
        double r5049600 = r5049599 * r5049599;
        double r5049601 = r5049598 + r5049600;
        double r5049602 = 2.0;
        double r5049603 = pow(r5049601, r5049602);
        double r5049604 = 4.0;
        double r5049605 = 1.0;
        double r5049606 = r5049605 + r5049597;
        double r5049607 = r5049598 * r5049606;
        double r5049608 = 3.0;
        double r5049609 = r5049608 * r5049597;
        double r5049610 = r5049605 - r5049609;
        double r5049611 = r5049600 * r5049610;
        double r5049612 = r5049607 + r5049611;
        double r5049613 = r5049604 * r5049612;
        double r5049614 = r5049603 + r5049613;
        double r5049615 = r5049614 - r5049605;
        return r5049615;
}

double f(double a, double b) {
        double r5049616 = a;
        double r5049617 = fma(r5049616, r5049616, r5049616);
        double r5049618 = -3.0;
        double r5049619 = r5049616 * r5049618;
        double r5049620 = b;
        double r5049621 = r5049620 * r5049620;
        double r5049622 = fma(r5049619, r5049621, r5049621);
        double r5049623 = fma(r5049617, r5049616, r5049622);
        double r5049624 = 4.0;
        double r5049625 = fma(r5049616, r5049616, r5049621);
        double r5049626 = -1.0;
        double r5049627 = fma(r5049625, r5049625, r5049626);
        double r5049628 = fma(r5049623, r5049624, r5049627);
        return r5049628;
}

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(\mathsf{fma}\left(\mathsf{fma}\left(a, a, a\right), a, \mathsf{fma}\left(a \cdot -3, b \cdot b, b \cdot b\right)\right), 4, \mathsf{fma}\left(\mathsf{fma}\left(a, a, b \cdot b\right), \mathsf{fma}\left(a, a, b \cdot b\right), -1\right)\right)}\]
  3. Final simplification0.2

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

Reproduce

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