Average Error: 0.2 → 0.2
Time: 21.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(3 + a\right)\right)\right) - 1\]
\[\mathsf{fma}\left(\mathsf{fma}\left(1, {a}^{2}, 3 \cdot {b}^{2}\right) - {a}^{3}, 4, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\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(3 + a\right)\right)\right) - 1
\mathsf{fma}\left(\mathsf{fma}\left(1, {a}^{2}, 3 \cdot {b}^{2}\right) - {a}^{3}, 4, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1
double f(double a, double b) {
        double r318693 = a;
        double r318694 = r318693 * r318693;
        double r318695 = b;
        double r318696 = r318695 * r318695;
        double r318697 = r318694 + r318696;
        double r318698 = 2.0;
        double r318699 = pow(r318697, r318698);
        double r318700 = 4.0;
        double r318701 = 1.0;
        double r318702 = r318701 - r318693;
        double r318703 = r318694 * r318702;
        double r318704 = 3.0;
        double r318705 = r318704 + r318693;
        double r318706 = r318696 * r318705;
        double r318707 = r318703 + r318706;
        double r318708 = r318700 * r318707;
        double r318709 = r318699 + r318708;
        double r318710 = r318709 - r318701;
        return r318710;
}

double f(double a, double b) {
        double r318711 = 1.0;
        double r318712 = a;
        double r318713 = 2.0;
        double r318714 = pow(r318712, r318713);
        double r318715 = 3.0;
        double r318716 = b;
        double r318717 = pow(r318716, r318713);
        double r318718 = r318715 * r318717;
        double r318719 = fma(r318711, r318714, r318718);
        double r318720 = 3.0;
        double r318721 = pow(r318712, r318720);
        double r318722 = r318719 - r318721;
        double r318723 = 4.0;
        double r318724 = r318716 * r318716;
        double r318725 = fma(r318712, r318712, r318724);
        double r318726 = 2.0;
        double r318727 = pow(r318725, r318726);
        double r318728 = fma(r318722, r318723, r318727);
        double r318729 = r318728 - r318711;
        return r318729;
}

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

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

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

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

Reproduce

herbie shell --seed 2019198 +o rules:numerics
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (24)"
  (- (+ (pow (+ (* a a) (* b b)) 2.0) (* 4.0 (+ (* (* a a) (- 1.0 a)) (* (* b b) (+ 3.0 a))))) 1.0))