Average Error: 0.2 → 1.4
Time: 22.4s
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\]
\[\begin{array}{l} \mathbf{if}\;a \le -0.003108479216049080465222864688712434144691 \lor \neg \left(a \le 8.829970458282619509299965487869599201076 \cdot 10^{-5}\right):\\ \;\;\;\;\left({a}^{\left(--4\right)} + 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\\ \mathbf{else}:\\ \;\;\;\;\left(\left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right) + 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\\ \end{array}\]
\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
\begin{array}{l}
\mathbf{if}\;a \le -0.003108479216049080465222864688712434144691 \lor \neg \left(a \le 8.829970458282619509299965487869599201076 \cdot 10^{-5}\right):\\
\;\;\;\;\left({a}^{\left(--4\right)} + 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\\

\mathbf{else}:\\
\;\;\;\;\left(\left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right) + 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\\

\end{array}
double f(double a, double b) {
        double r163618 = a;
        double r163619 = r163618 * r163618;
        double r163620 = b;
        double r163621 = r163620 * r163620;
        double r163622 = r163619 + r163621;
        double r163623 = 2.0;
        double r163624 = pow(r163622, r163623);
        double r163625 = 4.0;
        double r163626 = 1.0;
        double r163627 = r163626 + r163618;
        double r163628 = r163619 * r163627;
        double r163629 = 3.0;
        double r163630 = r163629 * r163618;
        double r163631 = r163626 - r163630;
        double r163632 = r163621 * r163631;
        double r163633 = r163628 + r163632;
        double r163634 = r163625 * r163633;
        double r163635 = r163624 + r163634;
        double r163636 = r163635 - r163626;
        return r163636;
}

double f(double a, double b) {
        double r163637 = a;
        double r163638 = -0.0031084792160490805;
        bool r163639 = r163637 <= r163638;
        double r163640 = 8.82997045828262e-05;
        bool r163641 = r163637 <= r163640;
        double r163642 = !r163641;
        bool r163643 = r163639 || r163642;
        double r163644 = -4.0;
        double r163645 = -r163644;
        double r163646 = pow(r163637, r163645);
        double r163647 = 4.0;
        double r163648 = r163637 * r163637;
        double r163649 = 1.0;
        double r163650 = r163649 + r163637;
        double r163651 = r163648 * r163650;
        double r163652 = b;
        double r163653 = r163652 * r163652;
        double r163654 = 3.0;
        double r163655 = r163654 * r163637;
        double r163656 = r163649 - r163655;
        double r163657 = r163653 * r163656;
        double r163658 = r163651 + r163657;
        double r163659 = r163647 * r163658;
        double r163660 = r163646 + r163659;
        double r163661 = r163660 - r163649;
        double r163662 = 4.0;
        double r163663 = pow(r163652, r163662);
        double r163664 = 2.0;
        double r163665 = 2.0;
        double r163666 = pow(r163637, r163665);
        double r163667 = pow(r163652, r163665);
        double r163668 = r163666 * r163667;
        double r163669 = r163664 * r163668;
        double r163670 = r163663 + r163669;
        double r163671 = r163670 + r163659;
        double r163672 = r163671 - r163649;
        double r163673 = r163643 ? r163661 : r163672;
        return r163673;
}

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. Split input into 2 regimes
  2. if a < -0.0031084792160490805 or 8.82997045828262e-05 < a

    1. Initial program 0.5

      \[\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. Taylor expanded around inf 7.5

      \[\leadsto \left(\color{blue}{{\left(\frac{1}{a}\right)}^{-4}} + 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\]
    3. Using strategy rm
    4. Applied inv-pow7.5

      \[\leadsto \left({\color{blue}{\left({a}^{-1}\right)}}^{-4} + 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\]
    5. Applied pow-pow6.7

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

      \[\leadsto \left({a}^{\color{blue}{\left(--4\right)}} + 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\]

    if -0.0031084792160490805 < a < 8.82997045828262e-05

    1. Initial program 0.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\]
    2. Taylor expanded around 0 0.0

      \[\leadsto \left(\color{blue}{\left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right)} + 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\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.4

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -0.003108479216049080465222864688712434144691 \lor \neg \left(a \le 8.829970458282619509299965487869599201076 \cdot 10^{-5}\right):\\ \;\;\;\;\left({a}^{\left(--4\right)} + 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\\ \mathbf{else}:\\ \;\;\;\;\left(\left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right) + 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\\ \end{array}\]

Reproduce

herbie shell --seed 2019326 
(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))