Average Error: 0.2 → 0.2
Time: 5.2s
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 r103473 = a;
        double r103474 = r103473 * r103473;
        double r103475 = b;
        double r103476 = r103475 * r103475;
        double r103477 = r103474 + r103476;
        double r103478 = 2.0;
        double r103479 = pow(r103477, r103478);
        double r103480 = 4.0;
        double r103481 = 1.0;
        double r103482 = r103481 + r103473;
        double r103483 = r103474 * r103482;
        double r103484 = 3.0;
        double r103485 = r103484 * r103473;
        double r103486 = r103481 - r103485;
        double r103487 = r103476 * r103486;
        double r103488 = r103483 + r103487;
        double r103489 = r103480 * r103488;
        double r103490 = r103479 + r103489;
        double r103491 = r103490 - r103481;
        return r103491;
}

double f(double a, double b) {
        double r103492 = a;
        double r103493 = r103492 * r103492;
        double r103494 = b;
        double r103495 = r103494 * r103494;
        double r103496 = r103493 + r103495;
        double r103497 = 2.0;
        double r103498 = 2.0;
        double r103499 = r103497 / r103498;
        double r103500 = pow(r103496, r103499);
        double r103501 = 4.0;
        double r103502 = 1.0;
        double r103503 = r103502 + r103492;
        double r103504 = r103493 * r103503;
        double r103505 = 3.0;
        double r103506 = r103505 * r103492;
        double r103507 = r103502 - r103506;
        double r103508 = r103495 * r103507;
        double r103509 = r103504 + r103508;
        double r103510 = r103501 * r103509;
        double r103511 = fma(r103500, r103500, r103510);
        double r103512 = r103511 - r103502;
        return r103512;
}

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 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))