Average Error: 0.2 → 0.1
Time: 7.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(3 + a\right)\right)\right) - 1\]
\[\begin{array}{l} \mathbf{if}\;{\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) \le 2.61378735895491685 \cdot 10^{59}:\\ \;\;\;\;\left(\sqrt[3]{{\left({\left(a \cdot a + b \cdot b\right)}^{2}\right)}^{3}} + 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\\ \mathbf{else}:\\ \;\;\;\;\left({a}^{4} + \left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\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(3 + a\right)\right)\right) - 1
\begin{array}{l}
\mathbf{if}\;{\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) \le 2.61378735895491685 \cdot 10^{59}:\\
\;\;\;\;\left(\sqrt[3]{{\left({\left(a \cdot a + b \cdot b\right)}^{2}\right)}^{3}} + 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\\

\mathbf{else}:\\
\;\;\;\;\left({a}^{4} + \left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right)\right) - 1\\

\end{array}
double f(double a, double b) {
        double r200394 = a;
        double r200395 = r200394 * r200394;
        double r200396 = b;
        double r200397 = r200396 * r200396;
        double r200398 = r200395 + r200397;
        double r200399 = 2.0;
        double r200400 = pow(r200398, r200399);
        double r200401 = 4.0;
        double r200402 = 1.0;
        double r200403 = r200402 - r200394;
        double r200404 = r200395 * r200403;
        double r200405 = 3.0;
        double r200406 = r200405 + r200394;
        double r200407 = r200397 * r200406;
        double r200408 = r200404 + r200407;
        double r200409 = r200401 * r200408;
        double r200410 = r200400 + r200409;
        double r200411 = r200410 - r200402;
        return r200411;
}

double f(double a, double b) {
        double r200412 = a;
        double r200413 = r200412 * r200412;
        double r200414 = b;
        double r200415 = r200414 * r200414;
        double r200416 = r200413 + r200415;
        double r200417 = 2.0;
        double r200418 = pow(r200416, r200417);
        double r200419 = 4.0;
        double r200420 = 1.0;
        double r200421 = r200420 - r200412;
        double r200422 = r200413 * r200421;
        double r200423 = 3.0;
        double r200424 = r200423 + r200412;
        double r200425 = r200415 * r200424;
        double r200426 = r200422 + r200425;
        double r200427 = r200419 * r200426;
        double r200428 = r200418 + r200427;
        double r200429 = 2.613787358954917e+59;
        bool r200430 = r200428 <= r200429;
        double r200431 = 3.0;
        double r200432 = pow(r200418, r200431);
        double r200433 = cbrt(r200432);
        double r200434 = r200433 + r200427;
        double r200435 = r200434 - r200420;
        double r200436 = 4.0;
        double r200437 = pow(r200412, r200436);
        double r200438 = pow(r200414, r200436);
        double r200439 = 2.0;
        double r200440 = pow(r200412, r200439);
        double r200441 = pow(r200414, r200439);
        double r200442 = r200440 * r200441;
        double r200443 = r200439 * r200442;
        double r200444 = r200438 + r200443;
        double r200445 = r200437 + r200444;
        double r200446 = r200445 - r200420;
        double r200447 = r200430 ? r200435 : r200446;
        return r200447;
}

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 (+ (pow (+ (* a a) (* b b)) 2.0) (* 4.0 (+ (* (* a a) (- 1.0 a)) (* (* b b) (+ 3.0 a))))) < 2.613787358954917e+59

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

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

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

    if 2.613787358954917e+59 < (+ (pow (+ (* a a) (* b b)) 2.0) (* 4.0 (+ (* (* a a) (- 1.0 a)) (* (* b b) (+ 3.0 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(3 + a\right)\right)\right) - 1\]
    2. Taylor expanded around inf 0.0

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;{\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) \le 2.61378735895491685 \cdot 10^{59}:\\ \;\;\;\;\left(\sqrt[3]{{\left({\left(a \cdot a + b \cdot b\right)}^{2}\right)}^{3}} + 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\\ \mathbf{else}:\\ \;\;\;\;\left({a}^{4} + \left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right)\right) - 1\\ \end{array}\]

Reproduce

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