Average Error: 0.2 → 1.5
Time: 19.1s
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 r154737 = a;
        double r154738 = r154737 * r154737;
        double r154739 = b;
        double r154740 = r154739 * r154739;
        double r154741 = r154738 + r154740;
        double r154742 = 2.0;
        double r154743 = pow(r154741, r154742);
        double r154744 = 4.0;
        double r154745 = 1.0;
        double r154746 = r154745 + r154737;
        double r154747 = r154738 * r154746;
        double r154748 = 3.0;
        double r154749 = r154748 * r154737;
        double r154750 = r154745 - r154749;
        double r154751 = r154740 * r154750;
        double r154752 = r154747 + r154751;
        double r154753 = r154744 * r154752;
        double r154754 = r154743 + r154753;
        double r154755 = r154754 - r154745;
        return r154755;
}

double f(double a, double b) {
        double r154756 = a;
        double r154757 = -0.0031084792160490805;
        bool r154758 = r154756 <= r154757;
        double r154759 = 8.82997045828262e-05;
        bool r154760 = r154756 <= r154759;
        double r154761 = !r154760;
        bool r154762 = r154758 || r154761;
        double r154763 = -1.0;
        double r154764 = r154763 / r154756;
        double r154765 = -4.0;
        double r154766 = pow(r154764, r154765);
        double r154767 = 4.0;
        double r154768 = r154756 * r154756;
        double r154769 = 1.0;
        double r154770 = r154769 + r154756;
        double r154771 = r154768 * r154770;
        double r154772 = b;
        double r154773 = r154772 * r154772;
        double r154774 = 3.0;
        double r154775 = r154774 * r154756;
        double r154776 = r154769 - r154775;
        double r154777 = r154773 * r154776;
        double r154778 = r154771 + r154777;
        double r154779 = r154767 * r154778;
        double r154780 = r154766 + r154779;
        double r154781 = sqrt(r154780);
        double r154782 = r154781 * r154781;
        double r154783 = r154782 - r154769;
        double r154784 = 4.0;
        double r154785 = pow(r154772, r154784);
        double r154786 = 2.0;
        double r154787 = 2.0;
        double r154788 = pow(r154756, r154787);
        double r154789 = pow(r154772, r154787);
        double r154790 = r154788 * r154789;
        double r154791 = r154786 * r154790;
        double r154792 = r154785 + r154791;
        double r154793 = r154792 + r154779;
        double r154794 = r154793 - r154769;
        double r154795 = r154762 ? r154783 : r154794;
        return r154795;
}

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