Average Error: 0.2 → 0.2
Time: 54.9s
Precision: 64
\[\left({\left(a \cdot a + b \cdot b\right)}^{2.0} + 4.0 \cdot \left(b \cdot b\right)\right) - 1.0\]
\[4.0 \cdot \left(b \cdot b\right) + \left({\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2.0} - 1.0\right)\]
\left({\left(a \cdot a + b \cdot b\right)}^{2.0} + 4.0 \cdot \left(b \cdot b\right)\right) - 1.0
4.0 \cdot \left(b \cdot b\right) + \left({\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2.0} - 1.0\right)
double f(double a, double b) {
        double r9731270 = a;
        double r9731271 = r9731270 * r9731270;
        double r9731272 = b;
        double r9731273 = r9731272 * r9731272;
        double r9731274 = r9731271 + r9731273;
        double r9731275 = 2.0;
        double r9731276 = pow(r9731274, r9731275);
        double r9731277 = 4.0;
        double r9731278 = r9731277 * r9731273;
        double r9731279 = r9731276 + r9731278;
        double r9731280 = 1.0;
        double r9731281 = r9731279 - r9731280;
        return r9731281;
}

double f(double a, double b) {
        double r9731282 = 4.0;
        double r9731283 = b;
        double r9731284 = r9731283 * r9731283;
        double r9731285 = r9731282 * r9731284;
        double r9731286 = a;
        double r9731287 = fma(r9731286, r9731286, r9731284);
        double r9731288 = 2.0;
        double r9731289 = pow(r9731287, r9731288);
        double r9731290 = 1.0;
        double r9731291 = r9731289 - r9731290;
        double r9731292 = r9731285 + r9731291;
        return r9731292;
}

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.0} + 4.0 \cdot \left(b \cdot b\right)\right) - 1.0\]
  2. Simplified0.2

    \[\leadsto \color{blue}{\mathsf{fma}\left(4.0, b \cdot b, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2.0}\right) - 1.0}\]
  3. Using strategy rm
  4. Applied fma-udef0.2

    \[\leadsto \color{blue}{\left(4.0 \cdot \left(b \cdot b\right) + {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2.0}\right)} - 1.0\]
  5. Applied associate--l+0.2

    \[\leadsto \color{blue}{4.0 \cdot \left(b \cdot b\right) + \left({\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2.0} - 1.0\right)}\]
  6. Final simplification0.2

    \[\leadsto 4.0 \cdot \left(b \cdot b\right) + \left({\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2.0} - 1.0\right)\]

Reproduce

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