Average Error: 0.2 → 0.2
Time: 26.1s
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 r169785 = a;
        double r169786 = r169785 * r169785;
        double r169787 = b;
        double r169788 = r169787 * r169787;
        double r169789 = r169786 + r169788;
        double r169790 = 2.0;
        double r169791 = pow(r169789, r169790);
        double r169792 = 4.0;
        double r169793 = r169792 * r169788;
        double r169794 = r169791 + r169793;
        double r169795 = 1.0;
        double r169796 = r169794 - r169795;
        return r169796;
}

double f(double a, double b) {
        double r169797 = 4.0;
        double r169798 = b;
        double r169799 = r169797 * r169798;
        double r169800 = a;
        double r169801 = r169798 * r169798;
        double r169802 = fma(r169800, r169800, r169801);
        double r169803 = 2.0;
        double r169804 = pow(r169802, r169803);
        double r169805 = fma(r169799, r169798, r169804);
        double r169806 = 1.0;
        double r169807 = r169805 - r169806;
        return r169807;
}

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 2019303 +o rules:numerics
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (26)"
  :precision binary64
  (- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (* b b))) 1))