Average Error: 0.2 → 0.0
Time: 23.7s
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(\mathsf{fma}\left(b \cdot b, 1 - 3 \cdot a, \mathsf{fma}\left(a \cdot a, a, a \cdot a\right)\right), 4, \mathsf{fma}\left(\left(a \cdot b\right) \cdot \left(a \cdot b\right), 2, {b}^{4} + {a}^{4}\right) - 1\right)\]
\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(\mathsf{fma}\left(b \cdot b, 1 - 3 \cdot a, \mathsf{fma}\left(a \cdot a, a, a \cdot a\right)\right), 4, \mathsf{fma}\left(\left(a \cdot b\right) \cdot \left(a \cdot b\right), 2, {b}^{4} + {a}^{4}\right) - 1\right)
double f(double a, double b) {
        double r4264027 = a;
        double r4264028 = r4264027 * r4264027;
        double r4264029 = b;
        double r4264030 = r4264029 * r4264029;
        double r4264031 = r4264028 + r4264030;
        double r4264032 = 2.0;
        double r4264033 = pow(r4264031, r4264032);
        double r4264034 = 4.0;
        double r4264035 = 1.0;
        double r4264036 = r4264035 + r4264027;
        double r4264037 = r4264028 * r4264036;
        double r4264038 = 3.0;
        double r4264039 = r4264038 * r4264027;
        double r4264040 = r4264035 - r4264039;
        double r4264041 = r4264030 * r4264040;
        double r4264042 = r4264037 + r4264041;
        double r4264043 = r4264034 * r4264042;
        double r4264044 = r4264033 + r4264043;
        double r4264045 = r4264044 - r4264035;
        return r4264045;
}

double f(double a, double b) {
        double r4264046 = b;
        double r4264047 = r4264046 * r4264046;
        double r4264048 = 1.0;
        double r4264049 = 3.0;
        double r4264050 = a;
        double r4264051 = r4264049 * r4264050;
        double r4264052 = r4264048 - r4264051;
        double r4264053 = r4264050 * r4264050;
        double r4264054 = fma(r4264053, r4264050, r4264053);
        double r4264055 = fma(r4264047, r4264052, r4264054);
        double r4264056 = 4.0;
        double r4264057 = r4264050 * r4264046;
        double r4264058 = r4264057 * r4264057;
        double r4264059 = 2.0;
        double r4264060 = pow(r4264046, r4264056);
        double r4264061 = pow(r4264050, r4264056);
        double r4264062 = r4264060 + r4264061;
        double r4264063 = fma(r4264058, r4264059, r4264062);
        double r4264064 = r4264063 - r4264048;
        double r4264065 = fma(r4264055, r4264056, r4264064);
        return r4264065;
}

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. Simplified0.2

    \[\leadsto \color{blue}{\mathsf{fma}\left(\mathsf{fma}\left(b \cdot b, 1 - 3 \cdot a, \mathsf{fma}\left(a \cdot a, a, a \cdot a\right)\right), 4, \mathsf{fma}\left(a, a, b \cdot b\right) \cdot \mathsf{fma}\left(a, a, b \cdot b\right) - 1\right)}\]
  3. Taylor expanded around -inf 0.0

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

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

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

Reproduce

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