Average Error: 0.2 → 0.2
Time: 7.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}}, \mathsf{fma}\left(4, \mathsf{fma}\left(a, a, b \cdot b\right), 4 \cdot {a}^{3}\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}}, \mathsf{fma}\left(4, \mathsf{fma}\left(a, a, b \cdot b\right), 4 \cdot {a}^{3}\right)\right) - 1
double f(double a, double b) {
        double r165439 = a;
        double r165440 = r165439 * r165439;
        double r165441 = b;
        double r165442 = r165441 * r165441;
        double r165443 = r165440 + r165442;
        double r165444 = 2.0;
        double r165445 = pow(r165443, r165444);
        double r165446 = 4.0;
        double r165447 = 1.0;
        double r165448 = r165447 + r165439;
        double r165449 = r165440 * r165448;
        double r165450 = 3.0;
        double r165451 = r165450 * r165439;
        double r165452 = r165447 - r165451;
        double r165453 = r165442 * r165452;
        double r165454 = r165449 + r165453;
        double r165455 = r165446 * r165454;
        double r165456 = r165445 + r165455;
        double r165457 = r165456 - r165447;
        return r165457;
}

double f(double a, double b) {
        double r165458 = a;
        double r165459 = r165458 * r165458;
        double r165460 = b;
        double r165461 = r165460 * r165460;
        double r165462 = r165459 + r165461;
        double r165463 = 2.0;
        double r165464 = pow(r165462, r165463);
        double r165465 = sqrt(r165464);
        double r165466 = 4.0;
        double r165467 = fma(r165458, r165458, r165461);
        double r165468 = 3.0;
        double r165469 = pow(r165458, r165468);
        double r165470 = r165466 * r165469;
        double r165471 = fma(r165466, r165467, r165470);
        double r165472 = fma(r165465, r165465, r165471);
        double r165473 = 1.0;
        double r165474 = r165472 - r165473;
        return r165474;
}

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. Taylor expanded around 0 0.2

    \[\leadsto \left({\left(a \cdot a + b \cdot b\right)}^{2} + \color{blue}{\left(4 \cdot {a}^{3} + \left(4 \cdot {a}^{2} + 4 \cdot {b}^{2}\right)\right)}\right) - 1\]
  3. Simplified0.2

    \[\leadsto \left({\left(a \cdot a + b \cdot b\right)}^{2} + \color{blue}{\mathsf{fma}\left(4, \mathsf{fma}\left(a, a, b \cdot b\right), 4 \cdot {a}^{3}\right)}\right) - 1\]
  4. Using strategy rm
  5. 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}}} + \mathsf{fma}\left(4, \mathsf{fma}\left(a, a, b \cdot b\right), 4 \cdot {a}^{3}\right)\right) - 1\]
  6. 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}}, \mathsf{fma}\left(4, \mathsf{fma}\left(a, a, b \cdot b\right), 4 \cdot {a}^{3}\right)\right)} - 1\]
  7. 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}}, \mathsf{fma}\left(4, \mathsf{fma}\left(a, a, b \cdot b\right), 4 \cdot {a}^{3}\right)\right) - 1\]

Reproduce

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