Average Error: 0.2 → 0.2
Time: 5.6s
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\]
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(\left(a \cdot a\right) \cdot 1 + \left(-{a}^{3}\right)\right) + \left(b \cdot b\right) \cdot \left(3 + 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(3 + 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 + \left(-{a}^{3}\right)\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1
double f(double a, double b) {
        double r383617 = a;
        double r383618 = r383617 * r383617;
        double r383619 = b;
        double r383620 = r383619 * r383619;
        double r383621 = r383618 + r383620;
        double r383622 = 2.0;
        double r383623 = pow(r383621, r383622);
        double r383624 = 4.0;
        double r383625 = 1.0;
        double r383626 = r383625 - r383617;
        double r383627 = r383618 * r383626;
        double r383628 = 3.0;
        double r383629 = r383628 + r383617;
        double r383630 = r383620 * r383629;
        double r383631 = r383627 + r383630;
        double r383632 = r383624 * r383631;
        double r383633 = r383623 + r383632;
        double r383634 = r383633 - r383625;
        return r383634;
}

double f(double a, double b) {
        double r383635 = a;
        double r383636 = r383635 * r383635;
        double r383637 = b;
        double r383638 = r383637 * r383637;
        double r383639 = r383636 + r383638;
        double r383640 = 2.0;
        double r383641 = pow(r383639, r383640);
        double r383642 = 4.0;
        double r383643 = 1.0;
        double r383644 = r383636 * r383643;
        double r383645 = 3.0;
        double r383646 = pow(r383635, r383645);
        double r383647 = -r383646;
        double r383648 = r383644 + r383647;
        double r383649 = 3.0;
        double r383650 = r383649 + r383635;
        double r383651 = r383638 * r383650;
        double r383652 = r383648 + r383651;
        double r383653 = r383642 * r383652;
        double r383654 = r383641 + r383653;
        double r383655 = r383654 - r383643;
        return r383655;
}

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(3 + a\right)\right)\right) - 1\]
  2. Using strategy rm
  3. Applied sub-neg0.2

    \[\leadsto \left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(\left(a \cdot a\right) \cdot \color{blue}{\left(1 + \left(-a\right)\right)} + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1\]
  4. 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 \left(-a\right)\right)} + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1\]
  5. 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}{\left(-{a}^{3}\right)}\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1\]
  6. 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 + \left(-{a}^{3}\right)\right) + \left(b \cdot b\right) \cdot \left(3 + a\right)\right)\right) - 1\]

Reproduce

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