Average Error: 0.2 → 0.2
Time: 32.9s
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(b, \mathsf{fma}\left(a \cdot b, -3, b\right), \mathsf{fma}\left(a \cdot a, a, a \cdot a\right)\right), \mathsf{fma}\left(\mathsf{fma}\left(b, b, a \cdot a\right), \mathsf{fma}\left(b, b, a \cdot a\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(4, \mathsf{fma}\left(b, \mathsf{fma}\left(a \cdot b, -3, b\right), \mathsf{fma}\left(a \cdot a, a, a \cdot a\right)\right), \mathsf{fma}\left(\mathsf{fma}\left(b, b, a \cdot a\right), \mathsf{fma}\left(b, b, a \cdot a\right), -1\right)\right)
double f(double a, double b) {
        double r7430200 = a;
        double r7430201 = r7430200 * r7430200;
        double r7430202 = b;
        double r7430203 = r7430202 * r7430202;
        double r7430204 = r7430201 + r7430203;
        double r7430205 = 2.0;
        double r7430206 = pow(r7430204, r7430205);
        double r7430207 = 4.0;
        double r7430208 = 1.0;
        double r7430209 = r7430208 + r7430200;
        double r7430210 = r7430201 * r7430209;
        double r7430211 = 3.0;
        double r7430212 = r7430211 * r7430200;
        double r7430213 = r7430208 - r7430212;
        double r7430214 = r7430203 * r7430213;
        double r7430215 = r7430210 + r7430214;
        double r7430216 = r7430207 * r7430215;
        double r7430217 = r7430206 + r7430216;
        double r7430218 = r7430217 - r7430208;
        return r7430218;
}

double f(double a, double b) {
        double r7430219 = 4.0;
        double r7430220 = b;
        double r7430221 = a;
        double r7430222 = r7430221 * r7430220;
        double r7430223 = -3.0;
        double r7430224 = fma(r7430222, r7430223, r7430220);
        double r7430225 = r7430221 * r7430221;
        double r7430226 = fma(r7430225, r7430221, r7430225);
        double r7430227 = fma(r7430220, r7430224, r7430226);
        double r7430228 = fma(r7430220, r7430220, r7430225);
        double r7430229 = -1.0;
        double r7430230 = fma(r7430228, r7430228, r7430229);
        double r7430231 = fma(r7430219, r7430227, r7430230);
        return r7430231;
}

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

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

Reproduce

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