Average Error: 0.2 → 1.4
Time: 20.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(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}^{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\\ \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}^{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\\

\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 r203407 = a;
        double r203408 = r203407 * r203407;
        double r203409 = b;
        double r203410 = r203409 * r203409;
        double r203411 = r203408 + r203410;
        double r203412 = 2.0;
        double r203413 = pow(r203411, r203412);
        double r203414 = 4.0;
        double r203415 = 1.0;
        double r203416 = r203415 + r203407;
        double r203417 = r203408 * r203416;
        double r203418 = 3.0;
        double r203419 = r203418 * r203407;
        double r203420 = r203415 - r203419;
        double r203421 = r203410 * r203420;
        double r203422 = r203417 + r203421;
        double r203423 = r203414 * r203422;
        double r203424 = r203413 + r203423;
        double r203425 = r203424 - r203415;
        return r203425;
}

double f(double a, double b) {
        double r203426 = a;
        double r203427 = -0.0031084792160490805;
        bool r203428 = r203426 <= r203427;
        double r203429 = 8.82997045828262e-05;
        bool r203430 = r203426 <= r203429;
        double r203431 = !r203430;
        bool r203432 = r203428 || r203431;
        double r203433 = 4.0;
        double r203434 = pow(r203426, r203433);
        double r203435 = r203426 * r203426;
        double r203436 = 1.0;
        double r203437 = r203436 + r203426;
        double r203438 = r203435 * r203437;
        double r203439 = b;
        double r203440 = r203439 * r203439;
        double r203441 = 3.0;
        double r203442 = r203441 * r203426;
        double r203443 = r203436 - r203442;
        double r203444 = r203440 * r203443;
        double r203445 = r203438 + r203444;
        double r203446 = r203433 * r203445;
        double r203447 = r203434 + r203446;
        double r203448 = r203447 - r203436;
        double r203449 = 4.0;
        double r203450 = pow(r203439, r203449);
        double r203451 = 2.0;
        double r203452 = 2.0;
        double r203453 = pow(r203426, r203452);
        double r203454 = pow(r203439, r203452);
        double r203455 = r203453 * r203454;
        double r203456 = r203451 * r203455;
        double r203457 = r203450 + r203456;
        double r203458 = r203457 + r203446;
        double r203459 = r203458 - r203436;
        double r203460 = r203432 ? r203448 : r203459;
        return r203460;
}

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. Taylor expanded around 0 6.7

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

    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}^{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\\ \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))