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

\mathbf{else}:\\
\;\;\;\;\left(\mathsf{fma}\left(2, {a}^{2} \cdot {b}^{2}, {b}^{4}\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 r269340 = a;
        double r269341 = r269340 * r269340;
        double r269342 = b;
        double r269343 = r269342 * r269342;
        double r269344 = r269341 + r269343;
        double r269345 = 2.0;
        double r269346 = pow(r269344, r269345);
        double r269347 = 4.0;
        double r269348 = 1.0;
        double r269349 = r269348 + r269340;
        double r269350 = r269341 * r269349;
        double r269351 = 3.0;
        double r269352 = r269351 * r269340;
        double r269353 = r269348 - r269352;
        double r269354 = r269343 * r269353;
        double r269355 = r269350 + r269354;
        double r269356 = r269347 * r269355;
        double r269357 = r269346 + r269356;
        double r269358 = r269357 - r269348;
        return r269358;
}

double f(double a, double b) {
        double r269359 = a;
        double r269360 = -0.0031084792160490805;
        bool r269361 = r269359 <= r269360;
        double r269362 = 8.82997045828262e-05;
        bool r269363 = r269359 <= r269362;
        double r269364 = !r269363;
        bool r269365 = r269361 || r269364;
        double r269366 = 4.0;
        double r269367 = r269359 * r269359;
        double r269368 = 1.0;
        double r269369 = r269368 + r269359;
        double r269370 = b;
        double r269371 = r269370 * r269370;
        double r269372 = 3.0;
        double r269373 = r269372 * r269359;
        double r269374 = r269368 - r269373;
        double r269375 = r269371 * r269374;
        double r269376 = fma(r269367, r269369, r269375);
        double r269377 = -1.0;
        double r269378 = r269377 / r269359;
        double r269379 = -4.0;
        double r269380 = pow(r269378, r269379);
        double r269381 = fma(r269366, r269376, r269380);
        double r269382 = sqrt(r269381);
        double r269383 = r269382 * r269382;
        double r269384 = r269383 - r269368;
        double r269385 = 2.0;
        double r269386 = 2.0;
        double r269387 = pow(r269359, r269386);
        double r269388 = pow(r269370, r269386);
        double r269389 = r269387 * r269388;
        double r269390 = 4.0;
        double r269391 = pow(r269370, r269390);
        double r269392 = fma(r269385, r269389, r269391);
        double r269393 = r269367 * r269369;
        double r269394 = r269393 + r269375;
        double r269395 = r269366 * r269394;
        double r269396 = r269392 + r269395;
        double r269397 = r269396 - r269368;
        double r269398 = r269365 ? r269384 : r269397;
        return r269398;
}

Error

Bits error versus a

Bits error versus b

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\]
    5. Simplified7.6

      \[\leadsto \color{blue}{\sqrt{\mathsf{fma}\left(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(\frac{-1}{a}\right)}^{-4}\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\]
    6. Simplified7.6

      \[\leadsto \sqrt{\mathsf{fma}\left(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(\frac{-1}{a}\right)}^{-4}\right)} \cdot \color{blue}{\sqrt{\mathsf{fma}\left(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(\frac{-1}{a}\right)}^{-4}\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. Simplified0.0

      \[\leadsto \left(\color{blue}{\mathsf{fma}\left(2, {a}^{2} \cdot {b}^{2}, {b}^{4}\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{\mathsf{fma}\left(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(\frac{-1}{a}\right)}^{-4}\right)} \cdot \sqrt{\mathsf{fma}\left(4, \mathsf{fma}\left(a \cdot a, 1 + a, \left(b \cdot b\right) \cdot \left(1 - 3 \cdot a\right)\right), {\left(\frac{-1}{a}\right)}^{-4}\right)} - 1\\ \mathbf{else}:\\ \;\;\;\;\left(\mathsf{fma}\left(2, {a}^{2} \cdot {b}^{2}, {b}^{4}\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 +o rules:numerics
(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))