Average Error: 0.2 → 0.2
Time: 29.4s
Precision: 64
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(b \cdot b\right)\right) - 1\]
\[\mathsf{fma}\left(4 \cdot b, b, {\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(b \cdot b\right)\right) - 1
\mathsf{fma}\left(4 \cdot b, b, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1
double f(double a, double b) {
        double r267694 = a;
        double r267695 = r267694 * r267694;
        double r267696 = b;
        double r267697 = r267696 * r267696;
        double r267698 = r267695 + r267697;
        double r267699 = 2.0;
        double r267700 = pow(r267698, r267699);
        double r267701 = 4.0;
        double r267702 = r267701 * r267697;
        double r267703 = r267700 + r267702;
        double r267704 = 1.0;
        double r267705 = r267703 - r267704;
        return r267705;
}

double f(double a, double b) {
        double r267706 = 4.0;
        double r267707 = b;
        double r267708 = r267706 * r267707;
        double r267709 = a;
        double r267710 = r267707 * r267707;
        double r267711 = fma(r267709, r267709, r267710);
        double r267712 = 2.0;
        double r267713 = pow(r267711, r267712);
        double r267714 = fma(r267708, r267707, r267713);
        double r267715 = 1.0;
        double r267716 = r267714 - r267715;
        return r267716;
}

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(b \cdot b\right)\right) - 1\]
  2. Simplified0.2

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

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

Reproduce

herbie shell --seed 2019323 +o rules:numerics
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (26)"
  :precision binary64
  (- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (* b b))) 1))