Average Error: 0.2 → 0.2
Time: 28.0s
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, b \cdot 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, b \cdot b, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1
double f(double a, double b) {
        double r9376787 = a;
        double r9376788 = r9376787 * r9376787;
        double r9376789 = b;
        double r9376790 = r9376789 * r9376789;
        double r9376791 = r9376788 + r9376790;
        double r9376792 = 2.0;
        double r9376793 = pow(r9376791, r9376792);
        double r9376794 = 4.0;
        double r9376795 = r9376794 * r9376790;
        double r9376796 = r9376793 + r9376795;
        double r9376797 = 1.0;
        double r9376798 = r9376796 - r9376797;
        return r9376798;
}

double f(double a, double b) {
        double r9376799 = 4.0;
        double r9376800 = b;
        double r9376801 = r9376800 * r9376800;
        double r9376802 = a;
        double r9376803 = fma(r9376802, r9376802, r9376801);
        double r9376804 = 2.0;
        double r9376805 = pow(r9376803, r9376804);
        double r9376806 = fma(r9376799, r9376801, r9376805);
        double r9376807 = 1.0;
        double r9376808 = r9376806 - r9376807;
        return r9376808;
}

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, b \cdot b, {\left(\mathsf{fma}\left(a, a, b \cdot b\right)\right)}^{2}\right) - 1}\]
  3. Final simplification0.2

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

Reproduce

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