Average Error: 0.2 → 0.2
Time: 15.1s
Precision: 64
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1\]
\[\mathsf{fma}\left(\mathsf{fma}\left(a, a \cdot \left(1 - a\right), \left(\left(a + 3\right) \cdot b\right) \cdot b\right), 4, \mathsf{fma}\left(\mathsf{fma}\left(a, a, b \cdot b\right), \mathsf{fma}\left(a, a, b \cdot b\right), -1\right)\right)\]
\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \left(1 - a\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1
\mathsf{fma}\left(\mathsf{fma}\left(a, a \cdot \left(1 - a\right), \left(\left(a + 3\right) \cdot b\right) \cdot b\right), 4, \mathsf{fma}\left(\mathsf{fma}\left(a, a, b \cdot b\right), \mathsf{fma}\left(a, a, b \cdot b\right), -1\right)\right)
double f(double a, double b) {
        double r3176239 = a;
        double r3176240 = r3176239 * r3176239;
        double r3176241 = b;
        double r3176242 = r3176241 * r3176241;
        double r3176243 = r3176240 + r3176242;
        double r3176244 = 2.0;
        double r3176245 = pow(r3176243, r3176244);
        double r3176246 = 4.0;
        double r3176247 = 1.0;
        double r3176248 = r3176247 - r3176239;
        double r3176249 = r3176240 * r3176248;
        double r3176250 = 3.0;
        double r3176251 = r3176250 + r3176239;
        double r3176252 = r3176242 * r3176251;
        double r3176253 = r3176249 + r3176252;
        double r3176254 = r3176246 * r3176253;
        double r3176255 = r3176245 + r3176254;
        double r3176256 = r3176255 - r3176247;
        return r3176256;
}

double f(double a, double b) {
        double r3176257 = a;
        double r3176258 = 1.0;
        double r3176259 = r3176258 - r3176257;
        double r3176260 = r3176257 * r3176259;
        double r3176261 = 3.0;
        double r3176262 = r3176257 + r3176261;
        double r3176263 = b;
        double r3176264 = r3176262 * r3176263;
        double r3176265 = r3176264 * r3176263;
        double r3176266 = fma(r3176257, r3176260, r3176265);
        double r3176267 = 4.0;
        double r3176268 = r3176263 * r3176263;
        double r3176269 = fma(r3176257, r3176257, r3176268);
        double r3176270 = -1.0;
        double r3176271 = fma(r3176269, r3176269, r3176270);
        double r3176272 = fma(r3176266, r3176267, r3176271);
        return r3176272;
}

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

    \[\leadsto \color{blue}{\mathsf{fma}\left(\mathsf{fma}\left(a, a \cdot \left(1 - a\right), \left(a + 3\right) \cdot \left(b \cdot b\right)\right), 4, \mathsf{fma}\left(\mathsf{fma}\left(a, a, b \cdot b\right), \mathsf{fma}\left(a, a, b \cdot b\right), -1\right)\right)}\]
  3. Using strategy rm
  4. Applied associate-*r*0.2

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

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

Reproduce

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