Average Error: 0.2 → 0.1
Time: 47.3s
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\]
\[\left(4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - a \cdot 3\right)\right) + \mathsf{fma}\left(b, \left(\mathsf{fma}\left(b, b, \left(\left(a \cdot a\right) \cdot 2\right)\right) \cdot b\right), \left({a}^{4}\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
\left(4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 + a\right) + \left(b \cdot b\right) \cdot \left(1 - a \cdot 3\right)\right) + \mathsf{fma}\left(b, \left(\mathsf{fma}\left(b, b, \left(\left(a \cdot a\right) \cdot 2\right)\right) \cdot b\right), \left({a}^{4}\right)\right)\right) - 1
double f(double a, double b) {
        double r47735700 = a;
        double r47735701 = r47735700 * r47735700;
        double r47735702 = b;
        double r47735703 = r47735702 * r47735702;
        double r47735704 = r47735701 + r47735703;
        double r47735705 = 2.0;
        double r47735706 = pow(r47735704, r47735705);
        double r47735707 = 4.0;
        double r47735708 = 1.0;
        double r47735709 = r47735708 + r47735700;
        double r47735710 = r47735701 * r47735709;
        double r47735711 = 3.0;
        double r47735712 = r47735711 * r47735700;
        double r47735713 = r47735708 - r47735712;
        double r47735714 = r47735703 * r47735713;
        double r47735715 = r47735710 + r47735714;
        double r47735716 = r47735707 * r47735715;
        double r47735717 = r47735706 + r47735716;
        double r47735718 = r47735717 - r47735708;
        return r47735718;
}

double f(double a, double b) {
        double r47735719 = 4.0;
        double r47735720 = a;
        double r47735721 = r47735720 * r47735720;
        double r47735722 = 1.0;
        double r47735723 = r47735722 + r47735720;
        double r47735724 = r47735721 * r47735723;
        double r47735725 = b;
        double r47735726 = r47735725 * r47735725;
        double r47735727 = 3.0;
        double r47735728 = r47735720 * r47735727;
        double r47735729 = r47735722 - r47735728;
        double r47735730 = r47735726 * r47735729;
        double r47735731 = r47735724 + r47735730;
        double r47735732 = r47735719 * r47735731;
        double r47735733 = 2.0;
        double r47735734 = r47735721 * r47735733;
        double r47735735 = fma(r47735725, r47735725, r47735734);
        double r47735736 = r47735735 * r47735725;
        double r47735737 = pow(r47735720, r47735719);
        double r47735738 = fma(r47735725, r47735736, r47735737);
        double r47735739 = r47735732 + r47735738;
        double r47735740 = r47735739 - r47735722;
        return r47735740;
}

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. Taylor expanded around 0 0.0

    \[\leadsto \left(\color{blue}{\left({b}^{4} + \left(2 \cdot \left({a}^{2} \cdot {b}^{2}\right) + {a}^{4}\right)\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\]
  3. Simplified0.2

    \[\leadsto \left(\color{blue}{\mathsf{fma}\left(b, \left(b \cdot \mathsf{fma}\left(b, b, \left(2 \cdot \left(a \cdot a\right)\right)\right)\right), \left(\left(a \cdot a\right) \cdot \left(a \cdot a\right)\right)\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. Taylor expanded around 0 0.1

    \[\leadsto \left(\mathsf{fma}\left(b, \left(b \cdot \mathsf{fma}\left(b, b, \left(2 \cdot \left(a \cdot a\right)\right)\right)\right), \color{blue}{\left({a}^{4}\right)}\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.1

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

Reproduce

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