Average Error: 0.2 → 1.5
Time: 18.7s
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}\;a \le -0.003108479216049080465222864688712434144691 \lor \neg \left(a \le 8.829970458282619509299965487869599201076 \cdot 10^{-5}\right):\\ \;\;\;\;\sqrt{{\left(\frac{-1}{a}\right)}^{-4} + 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)} \cdot \sqrt{{\left(\frac{-1}{a}\right)}^{-4} + 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)} - 1\\ \mathbf{else}:\\ \;\;\;\;\left(\left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right) + 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\\ \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}\;a \le -0.003108479216049080465222864688712434144691 \lor \neg \left(a \le 8.829970458282619509299965487869599201076 \cdot 10^{-5}\right):\\
\;\;\;\;\sqrt{{\left(\frac{-1}{a}\right)}^{-4} + 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)} \cdot \sqrt{{\left(\frac{-1}{a}\right)}^{-4} + 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)} - 1\\

\mathbf{else}:\\
\;\;\;\;\left(\left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right) + 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\\

\end{array}
double f(double a, double b) {
        double r151011 = a;
        double r151012 = r151011 * r151011;
        double r151013 = b;
        double r151014 = r151013 * r151013;
        double r151015 = r151012 + r151014;
        double r151016 = 2.0;
        double r151017 = pow(r151015, r151016);
        double r151018 = 4.0;
        double r151019 = 1.0;
        double r151020 = r151019 + r151011;
        double r151021 = r151012 * r151020;
        double r151022 = 3.0;
        double r151023 = r151022 * r151011;
        double r151024 = r151019 - r151023;
        double r151025 = r151014 * r151024;
        double r151026 = r151021 + r151025;
        double r151027 = r151018 * r151026;
        double r151028 = r151017 + r151027;
        double r151029 = r151028 - r151019;
        return r151029;
}

double f(double a, double b) {
        double r151030 = a;
        double r151031 = -0.0031084792160490805;
        bool r151032 = r151030 <= r151031;
        double r151033 = 8.82997045828262e-05;
        bool r151034 = r151030 <= r151033;
        double r151035 = !r151034;
        bool r151036 = r151032 || r151035;
        double r151037 = -1.0;
        double r151038 = r151037 / r151030;
        double r151039 = -4.0;
        double r151040 = pow(r151038, r151039);
        double r151041 = 4.0;
        double r151042 = r151030 * r151030;
        double r151043 = 1.0;
        double r151044 = r151043 + r151030;
        double r151045 = r151042 * r151044;
        double r151046 = b;
        double r151047 = r151046 * r151046;
        double r151048 = 3.0;
        double r151049 = r151048 * r151030;
        double r151050 = r151043 - r151049;
        double r151051 = r151047 * r151050;
        double r151052 = r151045 + r151051;
        double r151053 = r151041 * r151052;
        double r151054 = r151040 + r151053;
        double r151055 = sqrt(r151054);
        double r151056 = r151055 * r151055;
        double r151057 = r151056 - r151043;
        double r151058 = 4.0;
        double r151059 = pow(r151046, r151058);
        double r151060 = 2.0;
        double r151061 = 2.0;
        double r151062 = pow(r151030, r151061);
        double r151063 = pow(r151046, r151061);
        double r151064 = r151062 * r151063;
        double r151065 = r151060 * r151064;
        double r151066 = r151059 + r151065;
        double r151067 = r151066 + r151053;
        double r151068 = r151067 - r151043;
        double r151069 = r151036 ? r151057 : r151068;
        return r151069;
}

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 a < -0.0031084792160490805 or 8.82997045828262e-05 < 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 7.5

      \[\leadsto \left(\color{blue}{{\left(\frac{-1}{a}\right)}^{-4}} + 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\]
    3. Using strategy rm
    4. Applied add-sqr-sqrt7.6

      \[\leadsto \color{blue}{\sqrt{{\left(\frac{-1}{a}\right)}^{-4} + 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)} \cdot \sqrt{{\left(\frac{-1}{a}\right)}^{-4} + 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)}} - 1\]

    if -0.0031084792160490805 < a < 8.82997045828262e-05

    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. Taylor expanded around 0 0.0

      \[\leadsto \left(\color{blue}{\left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right)} + 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\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -0.003108479216049080465222864688712434144691 \lor \neg \left(a \le 8.829970458282619509299965487869599201076 \cdot 10^{-5}\right):\\ \;\;\;\;\sqrt{{\left(\frac{-1}{a}\right)}^{-4} + 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)} \cdot \sqrt{{\left(\frac{-1}{a}\right)}^{-4} + 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)} - 1\\ \mathbf{else}:\\ \;\;\;\;\left(\left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right) + 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\\ \end{array}\]

Reproduce

herbie shell --seed 2019326 
(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))