Average Error: 0.2 → 0.2
Time: 27.3s
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(4 \cdot \left(\left(b \cdot b\right) \cdot \left(1 - a \cdot 3\right) + \frac{\left(1 \cdot 1 - a \cdot a\right) \cdot \left(a \cdot a\right)}{1 - a}\right) + {\left(a \cdot a + b \cdot b\right)}^{2}\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(4 \cdot \left(\left(b \cdot b\right) \cdot \left(1 - a \cdot 3\right) + \frac{\left(1 \cdot 1 - a \cdot a\right) \cdot \left(a \cdot a\right)}{1 - a}\right) + {\left(a \cdot a + b \cdot b\right)}^{2}\right) - 1
double f(double a, double b) {
        double r9631595 = a;
        double r9631596 = r9631595 * r9631595;
        double r9631597 = b;
        double r9631598 = r9631597 * r9631597;
        double r9631599 = r9631596 + r9631598;
        double r9631600 = 2.0;
        double r9631601 = pow(r9631599, r9631600);
        double r9631602 = 4.0;
        double r9631603 = 1.0;
        double r9631604 = r9631603 + r9631595;
        double r9631605 = r9631596 * r9631604;
        double r9631606 = 3.0;
        double r9631607 = r9631606 * r9631595;
        double r9631608 = r9631603 - r9631607;
        double r9631609 = r9631598 * r9631608;
        double r9631610 = r9631605 + r9631609;
        double r9631611 = r9631602 * r9631610;
        double r9631612 = r9631601 + r9631611;
        double r9631613 = r9631612 - r9631603;
        return r9631613;
}

double f(double a, double b) {
        double r9631614 = 4.0;
        double r9631615 = b;
        double r9631616 = r9631615 * r9631615;
        double r9631617 = 1.0;
        double r9631618 = a;
        double r9631619 = 3.0;
        double r9631620 = r9631618 * r9631619;
        double r9631621 = r9631617 - r9631620;
        double r9631622 = r9631616 * r9631621;
        double r9631623 = r9631617 * r9631617;
        double r9631624 = r9631618 * r9631618;
        double r9631625 = r9631623 - r9631624;
        double r9631626 = r9631625 * r9631624;
        double r9631627 = r9631617 - r9631618;
        double r9631628 = r9631626 / r9631627;
        double r9631629 = r9631622 + r9631628;
        double r9631630 = r9631614 * r9631629;
        double r9631631 = r9631624 + r9631616;
        double r9631632 = 2.0;
        double r9631633 = pow(r9631631, r9631632);
        double r9631634 = r9631630 + r9631633;
        double r9631635 = r9631634 - r9631617;
        return r9631635;
}

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 flip-+0.2

    \[\leadsto \left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \color{blue}{\frac{1 \cdot 1 - a \cdot a}{1 - a}} + \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right)\right) - 1\]
  4. Applied associate-*r/0.2

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

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

Reproduce

herbie shell --seed 2019174 +o rules:numerics
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (25)"
  (- (+ (pow (+ (* a a) (* b b)) 2.0) (* 4.0 (+ (* (* a a) (+ 1.0 a)) (* (* b b) (- 1.0 (* 3.0 a)))))) 1.0))