Average Error: 0.2 → 0.6
Time: 23.7s
Precision: 64
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(b \cdot b\right)\right) - 1\]
\[\begin{array}{l} \mathbf{if}\;b \le -0.982267028366309968845371258794330060482 \lor \neg \left(b \le 1.837689356044482025254183099605143070221\right):\\ \;\;\;\;{a}^{4} + \left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left({a}^{4} + 4 \cdot {b}^{2}\right) - 1\\ \end{array}\]
\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(b \cdot b\right)\right) - 1
\begin{array}{l}
\mathbf{if}\;b \le -0.982267028366309968845371258794330060482 \lor \neg \left(b \le 1.837689356044482025254183099605143070221\right):\\
\;\;\;\;{a}^{4} + \left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right)\\

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

\end{array}
double f(double a, double b) {
        double r112394 = a;
        double r112395 = r112394 * r112394;
        double r112396 = b;
        double r112397 = r112396 * r112396;
        double r112398 = r112395 + r112397;
        double r112399 = 2.0;
        double r112400 = pow(r112398, r112399);
        double r112401 = 4.0;
        double r112402 = r112401 * r112397;
        double r112403 = r112400 + r112402;
        double r112404 = 1.0;
        double r112405 = r112403 - r112404;
        return r112405;
}

double f(double a, double b) {
        double r112406 = b;
        double r112407 = -0.98226702836631;
        bool r112408 = r112406 <= r112407;
        double r112409 = 1.837689356044482;
        bool r112410 = r112406 <= r112409;
        double r112411 = !r112410;
        bool r112412 = r112408 || r112411;
        double r112413 = a;
        double r112414 = 4.0;
        double r112415 = pow(r112413, r112414);
        double r112416 = pow(r112406, r112414);
        double r112417 = 2.0;
        double r112418 = pow(r112413, r112417);
        double r112419 = pow(r112406, r112417);
        double r112420 = r112418 * r112419;
        double r112421 = r112417 * r112420;
        double r112422 = r112416 + r112421;
        double r112423 = r112415 + r112422;
        double r112424 = 4.0;
        double r112425 = r112424 * r112419;
        double r112426 = r112415 + r112425;
        double r112427 = 1.0;
        double r112428 = r112426 - r112427;
        double r112429 = r112412 ? r112423 : r112428;
        return r112429;
}

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 b < -0.98226702836631 or 1.837689356044482 < b

    1. Initial program 0.5

      \[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(b \cdot b\right)\right) - 1\]
    2. Taylor expanded around inf 1.9

      \[\leadsto \color{blue}{{a}^{4} + \left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right)}\]

    if -0.98226702836631 < b < 1.837689356044482

    1. Initial program 0.1

      \[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(b \cdot b\right)\right) - 1\]
    2. Taylor expanded around 0 0.3

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -0.982267028366309968845371258794330060482 \lor \neg \left(b \le 1.837689356044482025254183099605143070221\right):\\ \;\;\;\;{a}^{4} + \left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left({a}^{4} + 4 \cdot {b}^{2}\right) - 1\\ \end{array}\]

Reproduce

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