Average Error: 0.2 → 0.1
Time: 20.8s
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 1.518149101387913421177978107255154532669 \cdot 10^{64}:\\ \;\;\;\;\sqrt[3]{{\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)}^{3}} - 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 1.518149101387913421177978107255154532669 \cdot 10^{64}:\\
\;\;\;\;\sqrt[3]{{\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)}^{3}} - 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 r150868 = a;
        double r150869 = r150868 * r150868;
        double r150870 = b;
        double r150871 = r150870 * r150870;
        double r150872 = r150869 + r150871;
        double r150873 = 2.0;
        double r150874 = pow(r150872, r150873);
        double r150875 = 4.0;
        double r150876 = 1.0;
        double r150877 = r150876 + r150868;
        double r150878 = r150869 * r150877;
        double r150879 = 3.0;
        double r150880 = r150879 * r150868;
        double r150881 = r150876 - r150880;
        double r150882 = r150871 * r150881;
        double r150883 = r150878 + r150882;
        double r150884 = r150875 * r150883;
        double r150885 = r150874 + r150884;
        double r150886 = r150885 - r150876;
        return r150886;
}

double f(double a, double b) {
        double r150887 = a;
        double r150888 = r150887 * r150887;
        double r150889 = b;
        double r150890 = r150889 * r150889;
        double r150891 = r150888 + r150890;
        double r150892 = 2.0;
        double r150893 = pow(r150891, r150892);
        double r150894 = 4.0;
        double r150895 = 1.0;
        double r150896 = r150895 + r150887;
        double r150897 = r150888 * r150896;
        double r150898 = 3.0;
        double r150899 = r150898 * r150887;
        double r150900 = r150895 - r150899;
        double r150901 = r150890 * r150900;
        double r150902 = r150897 + r150901;
        double r150903 = r150894 * r150902;
        double r150904 = r150893 + r150903;
        double r150905 = 1.5181491013879134e+64;
        bool r150906 = r150904 <= r150905;
        double r150907 = 3.0;
        double r150908 = pow(r150904, r150907);
        double r150909 = cbrt(r150908);
        double r150910 = r150909 - r150895;
        double r150911 = 4.0;
        double r150912 = pow(r150887, r150911);
        double r150913 = pow(r150889, r150911);
        double r150914 = 2.0;
        double r150915 = pow(r150887, r150914);
        double r150916 = pow(r150889, r150914);
        double r150917 = r150915 * r150916;
        double r150918 = r150914 * r150917;
        double r150919 = r150913 + r150918;
        double r150920 = r150912 + r150919;
        double r150921 = r150920 - r150895;
        double r150922 = r150906 ? r150910 : r150921;
        return r150922;
}

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.5181491013879134e+64

    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. Using strategy rm
    3. Applied add-cbrt-cube0.1

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

      \[\leadsto \sqrt[3]{\color{blue}{{\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)}^{3}}} - 1\]

    if 1.5181491013879134e+64 < (+ (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.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(1 - 3 \cdot a\right)\right) \le 1.518149101387913421177978107255154532669 \cdot 10^{64}:\\ \;\;\;\;\sqrt[3]{{\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)}^{3}} - 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 2019212 
(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))