Average Error: 0.2 → 0.2
Time: 45.9s
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(a, a, \left(b \cdot b\right)\right)\right), \left(\mathsf{fma}\left(a, a, \left(b \cdot b\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(a, a, \left(b \cdot b\right)\right)\right), \left(\mathsf{fma}\left(a, a, \left(b \cdot b\right)\right)\right), \left(\mathsf{fma}\left(\left(b \cdot b\right), 4, -1\right)\right)\right)
double f(double a, double b) {
        double r54464272 = a;
        double r54464273 = r54464272 * r54464272;
        double r54464274 = b;
        double r54464275 = r54464274 * r54464274;
        double r54464276 = r54464273 + r54464275;
        double r54464277 = 2.0;
        double r54464278 = pow(r54464276, r54464277);
        double r54464279 = 4.0;
        double r54464280 = r54464279 * r54464275;
        double r54464281 = r54464278 + r54464280;
        double r54464282 = 1.0;
        double r54464283 = r54464281 - r54464282;
        return r54464283;
}

double f(double a, double b) {
        double r54464284 = a;
        double r54464285 = b;
        double r54464286 = r54464285 * r54464285;
        double r54464287 = fma(r54464284, r54464284, r54464286);
        double r54464288 = 4.0;
        double r54464289 = -1.0;
        double r54464290 = fma(r54464286, r54464288, r54464289);
        double r54464291 = fma(r54464287, r54464287, r54464290);
        return r54464291;
}

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

Reproduce

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