Average Error: 0.2 → 0.2
Time: 25.0s
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(3 + a\right)\right)\right) - 1\]
\[\mathsf{fma}\left(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right), 4, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\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(3 + a\right)\right)\right) - 1
\mathsf{fma}\left(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right), 4, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1
double f(double a, double b) {
        double r194532 = a;
        double r194533 = r194532 * r194532;
        double r194534 = b;
        double r194535 = r194534 * r194534;
        double r194536 = r194533 + r194535;
        double r194537 = 2.0;
        double r194538 = pow(r194536, r194537);
        double r194539 = 4.0;
        double r194540 = 1.0;
        double r194541 = r194540 - r194532;
        double r194542 = r194533 * r194541;
        double r194543 = 3.0;
        double r194544 = r194543 + r194532;
        double r194545 = r194535 * r194544;
        double r194546 = r194542 + r194545;
        double r194547 = r194539 * r194546;
        double r194548 = r194538 + r194547;
        double r194549 = r194548 - r194540;
        return r194549;
}

double f(double a, double b) {
        double r194550 = a;
        double r194551 = r194550 * r194550;
        double r194552 = 1.0;
        double r194553 = r194552 - r194550;
        double r194554 = b;
        double r194555 = r194554 * r194554;
        double r194556 = 3.0;
        double r194557 = r194556 + r194550;
        double r194558 = r194555 * r194557;
        double r194559 = fma(r194551, r194553, r194558);
        double r194560 = 4.0;
        double r194561 = fma(r194550, r194550, r194555);
        double r194562 = 2.0;
        double r194563 = pow(r194561, r194562);
        double r194564 = fma(r194559, r194560, r194563);
        double r194565 = r194564 - r194552;
        return r194565;
}

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(3 + a\right)\right)\right) - 1\]
  2. Simplified0.2

    \[\leadsto \color{blue}{\mathsf{fma}\left(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right), 4, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1}\]
  3. Final simplification0.2

    \[\leadsto \mathsf{fma}\left(\mathsf{fma}\left(a \cdot a, 1 - a, \left(b \cdot b\right) \cdot \left(3 + a\right)\right), 4, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1\]

Reproduce

herbie shell --seed 2019323 +o rules:numerics
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (24)"
  :precision binary64
  (- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (+ (* (* a a) (- 1 a)) (* (* b b) (+ 3 a))))) 1))