Average Error: 0.2 → 0.2
Time: 25.5s
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(4, a, 4\right), a \cdot a, \mathsf{fma}\left(b \cdot b, \mathsf{fma}\left(a, -12, 4\right), \mathsf{fma}\left(\mathsf{fma}\left(a, a, b \cdot b\right), \mathsf{fma}\left(a, a, b \cdot b\right), -1\right)\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(4, a, 4\right), a \cdot a, \mathsf{fma}\left(b \cdot b, \mathsf{fma}\left(a, -12, 4\right), \mathsf{fma}\left(\mathsf{fma}\left(a, a, b \cdot b\right), \mathsf{fma}\left(a, a, b \cdot b\right), -1\right)\right)\right)
double f(double a, double b) {
        double r5150277 = a;
        double r5150278 = r5150277 * r5150277;
        double r5150279 = b;
        double r5150280 = r5150279 * r5150279;
        double r5150281 = r5150278 + r5150280;
        double r5150282 = 2.0;
        double r5150283 = pow(r5150281, r5150282);
        double r5150284 = 4.0;
        double r5150285 = 1.0;
        double r5150286 = r5150285 + r5150277;
        double r5150287 = r5150278 * r5150286;
        double r5150288 = 3.0;
        double r5150289 = r5150288 * r5150277;
        double r5150290 = r5150285 - r5150289;
        double r5150291 = r5150280 * r5150290;
        double r5150292 = r5150287 + r5150291;
        double r5150293 = r5150284 * r5150292;
        double r5150294 = r5150283 + r5150293;
        double r5150295 = r5150294 - r5150285;
        return r5150295;
}

double f(double a, double b) {
        double r5150296 = 4.0;
        double r5150297 = a;
        double r5150298 = fma(r5150296, r5150297, r5150296);
        double r5150299 = r5150297 * r5150297;
        double r5150300 = b;
        double r5150301 = r5150300 * r5150300;
        double r5150302 = -12.0;
        double r5150303 = fma(r5150297, r5150302, r5150296);
        double r5150304 = fma(r5150297, r5150297, r5150301);
        double r5150305 = -1.0;
        double r5150306 = fma(r5150304, r5150304, r5150305);
        double r5150307 = fma(r5150301, r5150303, r5150306);
        double r5150308 = fma(r5150298, r5150299, r5150307);
        return r5150308;
}

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

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

Reproduce

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