Average Error: 0.2 → 0.3
Time: 17.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 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 r208026 = a;
        double r208027 = r208026 * r208026;
        double r208028 = b;
        double r208029 = r208028 * r208028;
        double r208030 = r208027 + r208029;
        double r208031 = 2.0;
        double r208032 = pow(r208030, r208031);
        double r208033 = 4.0;
        double r208034 = 1.0;
        double r208035 = r208034 + r208026;
        double r208036 = r208027 * r208035;
        double r208037 = 3.0;
        double r208038 = r208037 * r208026;
        double r208039 = r208034 - r208038;
        double r208040 = r208029 * r208039;
        double r208041 = r208036 + r208040;
        double r208042 = r208033 * r208041;
        double r208043 = r208032 + r208042;
        double r208044 = r208043 - r208034;
        return r208044;
}

double f(double a, double b) {
        double r208045 = a;
        double r208046 = r208045 * r208045;
        double r208047 = b;
        double r208048 = r208047 * r208047;
        double r208049 = r208046 + r208048;
        double r208050 = 2.0;
        double r208051 = pow(r208049, r208050);
        double r208052 = 4.0;
        double r208053 = 1.0;
        double r208054 = r208053 + r208045;
        double r208055 = r208046 * r208054;
        double r208056 = 3.0;
        double r208057 = r208056 * r208045;
        double r208058 = r208053 - r208057;
        double r208059 = r208048 * r208058;
        double r208060 = r208055 + r208059;
        double r208061 = r208052 * r208060;
        double r208062 = r208051 + r208061;
        double r208063 = 1.3133200909487559e+36;
        bool r208064 = r208062 <= r208063;
        double r208065 = log(r208062);
        double r208066 = exp(r208065);
        double r208067 = r208066 - r208053;
        double r208068 = 4.0;
        double r208069 = pow(r208045, r208068);
        double r208070 = pow(r208047, r208068);
        double r208071 = 2.0;
        double r208072 = pow(r208045, r208071);
        double r208073 = pow(r208047, r208071);
        double r208074 = r208072 * r208073;
        double r208075 = r208071 * r208074;
        double r208076 = r208070 + r208075;
        double r208077 = r208069 + r208076;
        double r208078 = r208077 - r208053;
        double r208079 = r208064 ? r208067 : r208078;
        return r208079;
}

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))