Average Error: 0.2 → 0.2
Time: 7.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({\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, {\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, 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\]
\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({\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, {\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, 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
double f(double a, double b) {
        double r144286 = a;
        double r144287 = r144286 * r144286;
        double r144288 = b;
        double r144289 = r144288 * r144288;
        double r144290 = r144287 + r144289;
        double r144291 = 2.0;
        double r144292 = pow(r144290, r144291);
        double r144293 = 4.0;
        double r144294 = 1.0;
        double r144295 = r144294 + r144286;
        double r144296 = r144287 * r144295;
        double r144297 = 3.0;
        double r144298 = r144297 * r144286;
        double r144299 = r144294 - r144298;
        double r144300 = r144289 * r144299;
        double r144301 = r144296 + r144300;
        double r144302 = r144293 * r144301;
        double r144303 = r144292 + r144302;
        double r144304 = r144303 - r144294;
        return r144304;
}

double f(double a, double b) {
        double r144305 = a;
        double r144306 = r144305 * r144305;
        double r144307 = b;
        double r144308 = r144307 * r144307;
        double r144309 = r144306 + r144308;
        double r144310 = 2.0;
        double r144311 = 2.0;
        double r144312 = r144310 / r144311;
        double r144313 = pow(r144309, r144312);
        double r144314 = 4.0;
        double r144315 = 1.0;
        double r144316 = r144315 + r144305;
        double r144317 = r144306 * r144316;
        double r144318 = 3.0;
        double r144319 = r144318 * r144305;
        double r144320 = r144315 - r144319;
        double r144321 = r144308 * r144320;
        double r144322 = r144317 + r144321;
        double r144323 = r144314 * r144322;
        double r144324 = fma(r144313, r144313, r144323);
        double r144325 = r144324 - r144315;
        return r144325;
}

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. Using strategy rm
  3. Applied sqr-pow0.2

    \[\leadsto \left(\color{blue}{{\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)} \cdot {\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}} + 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\]
  4. Applied fma-def0.2

    \[\leadsto \color{blue}{\mathsf{fma}\left({\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, {\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, 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\]
  5. Final simplification0.2

    \[\leadsto \mathsf{fma}\left({\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, {\left(a \cdot a + b \cdot b\right)}^{\left(\frac{2}{2}\right)}, 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\]

Reproduce

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