Average Error: 0.2 → 0.0
Time: 19.5s
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(b \cdot b, 3 + a, \left(a - a \cdot a\right) \cdot a\right), 4, \mathsf{fma}\left(\left(b \cdot a\right) \cdot \left(b \cdot a\right), 2, {a}^{4} + {b}^{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(3 + a\right)\right)\right) - 1
\mathsf{fma}\left(\mathsf{fma}\left(b \cdot b, 3 + a, \left(a - a \cdot a\right) \cdot a\right), 4, \mathsf{fma}\left(\left(b \cdot a\right) \cdot \left(b \cdot a\right), 2, {a}^{4} + {b}^{4}\right) - 1\right)
double f(double a, double b) {
        double r8089974 = a;
        double r8089975 = r8089974 * r8089974;
        double r8089976 = b;
        double r8089977 = r8089976 * r8089976;
        double r8089978 = r8089975 + r8089977;
        double r8089979 = 2.0;
        double r8089980 = pow(r8089978, r8089979);
        double r8089981 = 4.0;
        double r8089982 = 1.0;
        double r8089983 = r8089982 - r8089974;
        double r8089984 = r8089975 * r8089983;
        double r8089985 = 3.0;
        double r8089986 = r8089985 + r8089974;
        double r8089987 = r8089977 * r8089986;
        double r8089988 = r8089984 + r8089987;
        double r8089989 = r8089981 * r8089988;
        double r8089990 = r8089980 + r8089989;
        double r8089991 = r8089990 - r8089982;
        return r8089991;
}

double f(double a, double b) {
        double r8089992 = b;
        double r8089993 = r8089992 * r8089992;
        double r8089994 = 3.0;
        double r8089995 = a;
        double r8089996 = r8089994 + r8089995;
        double r8089997 = r8089995 * r8089995;
        double r8089998 = r8089995 - r8089997;
        double r8089999 = r8089998 * r8089995;
        double r8090000 = fma(r8089993, r8089996, r8089999);
        double r8090001 = 4.0;
        double r8090002 = r8089992 * r8089995;
        double r8090003 = r8090002 * r8090002;
        double r8090004 = 2.0;
        double r8090005 = pow(r8089995, r8090001);
        double r8090006 = pow(r8089992, r8090001);
        double r8090007 = r8090005 + r8090006;
        double r8090008 = fma(r8090003, r8090004, r8090007);
        double r8090009 = 1.0;
        double r8090010 = r8090008 - r8090009;
        double r8090011 = fma(r8090000, r8090001, r8090010);
        return r8090011;
}

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(b \cdot b, a + 3, a \cdot \left(a - a \cdot a\right)\right), 4, \mathsf{fma}\left(b, b, a \cdot a\right) \cdot \mathsf{fma}\left(b, b, a \cdot a\right) - 1\right)}\]
  3. Taylor expanded around inf 0.0

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

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

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

Reproduce

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