Average Error: 0.2 → 0.2
Time: 5.3s
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(\sqrt{{\left(a \cdot a + b \cdot b\right)}^{2}}, \sqrt{{\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\]
\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(\sqrt{{\left(a \cdot a + b \cdot b\right)}^{2}}, \sqrt{{\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
double f(double a, double b) {
        double r224322 = a;
        double r224323 = r224322 * r224322;
        double r224324 = b;
        double r224325 = r224324 * r224324;
        double r224326 = r224323 + r224325;
        double r224327 = 2.0;
        double r224328 = pow(r224326, r224327);
        double r224329 = 4.0;
        double r224330 = 1.0;
        double r224331 = r224330 + r224322;
        double r224332 = r224323 * r224331;
        double r224333 = 3.0;
        double r224334 = r224333 * r224322;
        double r224335 = r224330 - r224334;
        double r224336 = r224325 * r224335;
        double r224337 = r224332 + r224336;
        double r224338 = r224329 * r224337;
        double r224339 = r224328 + r224338;
        double r224340 = r224339 - r224330;
        return r224340;
}

double f(double a, double b) {
        double r224341 = a;
        double r224342 = r224341 * r224341;
        double r224343 = b;
        double r224344 = r224343 * r224343;
        double r224345 = r224342 + r224344;
        double r224346 = 2.0;
        double r224347 = pow(r224345, r224346);
        double r224348 = sqrt(r224347);
        double r224349 = 4.0;
        double r224350 = 1.0;
        double r224351 = r224350 + r224341;
        double r224352 = r224342 * r224351;
        double r224353 = 3.0;
        double r224354 = r224353 * r224341;
        double r224355 = r224350 - r224354;
        double r224356 = r224344 * r224355;
        double r224357 = r224352 + r224356;
        double r224358 = r224349 * r224357;
        double r224359 = fma(r224348, r224348, r224358);
        double r224360 = r224359 - r224350;
        return r224360;
}

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 add-sqr-sqrt0.2

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

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

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

Reproduce

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