Average Error: 0.2 → 0.2
Time: 20.8s
Precision: 64
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(b \cdot b\right)\right) - 1\]
\[\mathsf{fma}\left(\left(\mathsf{fma}\left(b, b, \left(a \cdot a\right)\right)\right), \left(\mathsf{fma}\left(b, b, \left(a \cdot a\right)\right)\right), \left(\mathsf{fma}\left(\left(b \cdot b\right), 4, -1\right)\right)\right)\]
\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(b \cdot b\right)\right) - 1
\mathsf{fma}\left(\left(\mathsf{fma}\left(b, b, \left(a \cdot a\right)\right)\right), \left(\mathsf{fma}\left(b, b, \left(a \cdot a\right)\right)\right), \left(\mathsf{fma}\left(\left(b \cdot b\right), 4, -1\right)\right)\right)
double f(double a, double b) {
        double r65515904 = a;
        double r65515905 = r65515904 * r65515904;
        double r65515906 = b;
        double r65515907 = r65515906 * r65515906;
        double r65515908 = r65515905 + r65515907;
        double r65515909 = 2.0;
        double r65515910 = pow(r65515908, r65515909);
        double r65515911 = 4.0;
        double r65515912 = r65515911 * r65515907;
        double r65515913 = r65515910 + r65515912;
        double r65515914 = 1.0;
        double r65515915 = r65515913 - r65515914;
        return r65515915;
}

double f(double a, double b) {
        double r65515916 = b;
        double r65515917 = a;
        double r65515918 = r65515917 * r65515917;
        double r65515919 = fma(r65515916, r65515916, r65515918);
        double r65515920 = r65515916 * r65515916;
        double r65515921 = 4.0;
        double r65515922 = -1.0;
        double r65515923 = fma(r65515920, r65515921, r65515922);
        double r65515924 = fma(r65515919, r65515919, r65515923);
        return r65515924;
}

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

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

Reproduce

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