Average Error: 0.2 → 1.6
Time: 12.2s
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 -9.434783373745747375640341436664471075346 \cdot 10^{-5} \lor \neg \left(b \le 213.2067128981206280968763167038559913635\right):\\ \;\;\;\;\left(\left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right) + 4 \cdot \left(b \cdot b\right)\right) - 1\\ \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 -9.434783373745747375640341436664471075346 \cdot 10^{-5} \lor \neg \left(b \le 213.2067128981206280968763167038559913635\right):\\
\;\;\;\;\left(\left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right) + 4 \cdot \left(b \cdot b\right)\right) - 1\\

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

\end{array}
double f(double a, double b) {
        double r205936 = a;
        double r205937 = r205936 * r205936;
        double r205938 = b;
        double r205939 = r205938 * r205938;
        double r205940 = r205937 + r205939;
        double r205941 = 2.0;
        double r205942 = pow(r205940, r205941);
        double r205943 = 4.0;
        double r205944 = r205943 * r205939;
        double r205945 = r205942 + r205944;
        double r205946 = 1.0;
        double r205947 = r205945 - r205946;
        return r205947;
}

double f(double a, double b) {
        double r205948 = b;
        double r205949 = -9.434783373745747e-05;
        bool r205950 = r205948 <= r205949;
        double r205951 = 213.20671289812063;
        bool r205952 = r205948 <= r205951;
        double r205953 = !r205952;
        bool r205954 = r205950 || r205953;
        double r205955 = 4.0;
        double r205956 = pow(r205948, r205955);
        double r205957 = 2.0;
        double r205958 = a;
        double r205959 = 2.0;
        double r205960 = pow(r205958, r205959);
        double r205961 = pow(r205948, r205959);
        double r205962 = r205960 * r205961;
        double r205963 = r205957 * r205962;
        double r205964 = r205956 + r205963;
        double r205965 = 4.0;
        double r205966 = r205948 * r205948;
        double r205967 = r205965 * r205966;
        double r205968 = r205964 + r205967;
        double r205969 = 1.0;
        double r205970 = r205968 - r205969;
        double r205971 = pow(r205958, r205955);
        double r205972 = r205965 * r205961;
        double r205973 = r205971 + r205972;
        double r205974 = r205973 - r205969;
        double r205975 = r205954 ? r205970 : r205974;
        return r205975;
}

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 < -9.434783373745747e-05 or 213.20671289812063 < 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 0 6.6

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

    if -9.434783373745747e-05 < b < 213.20671289812063

    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 simplification1.6

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

Reproduce

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