Average Error: 0.2 → 0.2
Time: 27.0s
Precision: 64
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(b \cdot b\right)\right) - 1\]
\[\mathsf{fma}\left(4, b \cdot b, {\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(b \cdot b\right)\right) - 1
\mathsf{fma}\left(4, b \cdot b, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1
double f(double a, double b) {
        double r11785371 = a;
        double r11785372 = r11785371 * r11785371;
        double r11785373 = b;
        double r11785374 = r11785373 * r11785373;
        double r11785375 = r11785372 + r11785374;
        double r11785376 = 2.0;
        double r11785377 = pow(r11785375, r11785376);
        double r11785378 = 4.0;
        double r11785379 = r11785378 * r11785374;
        double r11785380 = r11785377 + r11785379;
        double r11785381 = 1.0;
        double r11785382 = r11785380 - r11785381;
        return r11785382;
}

double f(double a, double b) {
        double r11785383 = 4.0;
        double r11785384 = b;
        double r11785385 = r11785384 * r11785384;
        double r11785386 = a;
        double r11785387 = fma(r11785386, r11785386, r11785385);
        double r11785388 = 2.0;
        double r11785389 = pow(r11785387, r11785388);
        double r11785390 = fma(r11785383, r11785385, r11785389);
        double r11785391 = 1.0;
        double r11785392 = r11785390 - r11785391;
        return r11785392;
}

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(b \cdot b\right)\right) - 1\]
  2. Simplified0.2

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

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

Reproduce

herbie shell --seed 2019172 +o rules:numerics
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (26)"
  (- (+ (pow (+ (* a a) (* b b)) 2.0) (* 4.0 (* b b))) 1.0))