Average Error: 0.2 → 0.2
Time: 16.6s
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 r294020 = a;
        double r294021 = r294020 * r294020;
        double r294022 = b;
        double r294023 = r294022 * r294022;
        double r294024 = r294021 + r294023;
        double r294025 = 2.0;
        double r294026 = pow(r294024, r294025);
        double r294027 = 4.0;
        double r294028 = 1.0;
        double r294029 = r294028 + r294020;
        double r294030 = r294021 * r294029;
        double r294031 = 3.0;
        double r294032 = r294031 * r294020;
        double r294033 = r294028 - r294032;
        double r294034 = r294023 * r294033;
        double r294035 = r294030 + r294034;
        double r294036 = r294027 * r294035;
        double r294037 = r294026 + r294036;
        double r294038 = r294037 - r294028;
        return r294038;
}

double f(double a, double b) {
        double r294039 = a;
        double r294040 = r294039 * r294039;
        double r294041 = b;
        double r294042 = r294041 * r294041;
        double r294043 = r294040 + r294042;
        double r294044 = 2.0;
        double r294045 = 2.0;
        double r294046 = r294044 / r294045;
        double r294047 = pow(r294043, r294046);
        double r294048 = 4.0;
        double r294049 = 1.0;
        double r294050 = r294049 + r294039;
        double r294051 = r294040 * r294050;
        double r294052 = 3.0;
        double r294053 = r294052 * r294039;
        double r294054 = r294049 - r294053;
        double r294055 = r294042 * r294054;
        double r294056 = r294051 + r294055;
        double r294057 = r294048 * r294056;
        double r294058 = fma(r294047, r294047, r294057);
        double r294059 = r294058 - r294049;
        return r294059;
}

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