Average Error: 0.2 → 0.3
Time: 17.2s
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}\;{\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) \le 1313320090948755923146506866998116352:\\ \;\;\;\;e^{\log \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\\ \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(1 - 3 \cdot 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(1 - 3 \cdot a\right)\right) \le 1313320090948755923146506866998116352:\\
\;\;\;\;e^{\log \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\\

\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 r81861 = a;
        double r81862 = r81861 * r81861;
        double r81863 = b;
        double r81864 = r81863 * r81863;
        double r81865 = r81862 + r81864;
        double r81866 = 2.0;
        double r81867 = pow(r81865, r81866);
        double r81868 = 4.0;
        double r81869 = 1.0;
        double r81870 = r81869 + r81861;
        double r81871 = r81862 * r81870;
        double r81872 = 3.0;
        double r81873 = r81872 * r81861;
        double r81874 = r81869 - r81873;
        double r81875 = r81864 * r81874;
        double r81876 = r81871 + r81875;
        double r81877 = r81868 * r81876;
        double r81878 = r81867 + r81877;
        double r81879 = r81878 - r81869;
        return r81879;
}

double f(double a, double b) {
        double r81880 = a;
        double r81881 = r81880 * r81880;
        double r81882 = b;
        double r81883 = r81882 * r81882;
        double r81884 = r81881 + r81883;
        double r81885 = 2.0;
        double r81886 = pow(r81884, r81885);
        double r81887 = 4.0;
        double r81888 = 1.0;
        double r81889 = r81888 + r81880;
        double r81890 = r81881 * r81889;
        double r81891 = 3.0;
        double r81892 = r81891 * r81880;
        double r81893 = r81888 - r81892;
        double r81894 = r81883 * r81893;
        double r81895 = r81890 + r81894;
        double r81896 = r81887 * r81895;
        double r81897 = r81886 + r81896;
        double r81898 = 1.3133200909487559e+36;
        bool r81899 = r81897 <= r81898;
        double r81900 = log(r81897);
        double r81901 = exp(r81900);
        double r81902 = r81901 - r81888;
        double r81903 = 4.0;
        double r81904 = pow(r81880, r81903);
        double r81905 = pow(r81882, r81903);
        double r81906 = 2.0;
        double r81907 = pow(r81880, r81906);
        double r81908 = pow(r81882, r81906);
        double r81909 = r81907 * r81908;
        double r81910 = r81906 * r81909;
        double r81911 = r81905 + r81910;
        double r81912 = r81904 + r81911;
        double r81913 = r81912 - r81888;
        double r81914 = r81899 ? r81902 : r81913;
        return r81914;
}

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) (- 1.0 (* 3.0 a)))))) < 1.3133200909487559e+36

    1. Initial program 0.0

      \[\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. Using strategy rm
    3. Applied add-exp-log0.2

      \[\leadsto \color{blue}{e^{\log \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\]

    if 1.3133200909487559e+36 < (+ (pow (+ (* a a) (* b b)) 2.0) (* 4.0 (+ (* (* a a) (+ 1.0 a)) (* (* b b) (- 1.0 (* 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(1 - 3 \cdot a\right)\right)\right) - 1\]
    2. Taylor expanded around inf 0.6

      \[\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.3

    \[\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(1 - 3 \cdot a\right)\right) \le 1313320090948755923146506866998116352:\\ \;\;\;\;e^{\log \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\\ \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 2019297 
(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))