Average Error: 0.2 → 0.2
Time: 6.0s
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(1 - 3 \cdot a\right)\right)\right) - 1\]
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(\left(a \cdot a\right) \cdot 1 + {a}^{3}\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]
\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(1 - 3 \cdot a\right)\right)\right) - 1
\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(\left(a \cdot a\right) \cdot 1 + {a}^{3}\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1
double f(double a, double b) {
        double r156441 = a;
        double r156442 = r156441 * r156441;
        double r156443 = b;
        double r156444 = r156443 * r156443;
        double r156445 = r156442 + r156444;
        double r156446 = 2.0;
        double r156447 = pow(r156445, r156446);
        double r156448 = 4.0;
        double r156449 = 1.0;
        double r156450 = r156449 + r156441;
        double r156451 = r156442 * r156450;
        double r156452 = 3.0;
        double r156453 = r156452 * r156441;
        double r156454 = r156449 - r156453;
        double r156455 = r156444 * r156454;
        double r156456 = r156451 + r156455;
        double r156457 = r156448 * r156456;
        double r156458 = r156447 + r156457;
        double r156459 = r156458 - r156449;
        return r156459;
}

double f(double a, double b) {
        double r156460 = a;
        double r156461 = r156460 * r156460;
        double r156462 = b;
        double r156463 = r156462 * r156462;
        double r156464 = r156461 + r156463;
        double r156465 = 2.0;
        double r156466 = pow(r156464, r156465);
        double r156467 = 4.0;
        double r156468 = 1.0;
        double r156469 = r156461 * r156468;
        double r156470 = 3.0;
        double r156471 = pow(r156460, r156470);
        double r156472 = r156469 + r156471;
        double r156473 = 3.0;
        double r156474 = r156473 * r156460;
        double r156475 = r156468 - r156474;
        double r156476 = r156463 * r156475;
        double r156477 = r156472 + r156476;
        double r156478 = r156467 * r156477;
        double r156479 = r156466 + r156478;
        double r156480 = r156479 - r156468;
        return r156480;
}

Error

Bits error versus a

Bits error versus b

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

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(1 - 3 \cdot a\right)\right)\right) - 1\]
  2. Using strategy rm
  3. Applied distribute-lft-in0.2

    \[\leadsto \left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\color{blue}{\left(\left(a \cdot a\right) \cdot 1 + \left(a \cdot a\right) \cdot a\right)} + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]
  4. Simplified0.2

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

    \[\leadsto \left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(\left(a \cdot a\right) \cdot 1 + {a}^{3}\right) + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]

Reproduce

herbie shell --seed 2020056 
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (25)"
  :precision binary64
  (- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (+ (* (* a a) (+ 1 a)) (* (* b b) (- 1 (* 3 a)))))) 1))