Average Error: 0.2 → 0.4
Time: 6.0s
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 -2.4039381575323349 \lor \neg \left(a \le 0.41783821227377071\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(a \cdot a + b \cdot b\right)}^{2} - 1\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(a \cdot a + b \cdot b\right)}^{2} - 1\right)}\\ \mathbf{else}:\\ \;\;\;\;\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), \mathsf{fma}\left(2 \cdot {a}^{2}, {b}^{2}, {b}^{4}\right) - 1\right)\\ \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 -2.4039381575323349 \lor \neg \left(a \le 0.41783821227377071\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(a \cdot a + b \cdot b\right)}^{2} - 1\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(a \cdot a + b \cdot b\right)}^{2} - 1\right)}\\

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

\end{array}
double f(double a, double b) {
        double r487347 = a;
        double r487348 = r487347 * r487347;
        double r487349 = b;
        double r487350 = r487349 * r487349;
        double r487351 = r487348 + r487350;
        double r487352 = 2.0;
        double r487353 = pow(r487351, r487352);
        double r487354 = 4.0;
        double r487355 = 1.0;
        double r487356 = r487355 + r487347;
        double r487357 = r487348 * r487356;
        double r487358 = 3.0;
        double r487359 = r487358 * r487347;
        double r487360 = r487355 - r487359;
        double r487361 = r487350 * r487360;
        double r487362 = r487357 + r487361;
        double r487363 = r487354 * r487362;
        double r487364 = r487353 + r487363;
        double r487365 = r487364 - r487355;
        return r487365;
}

double f(double a, double b) {
        double r487366 = a;
        double r487367 = -2.403938157532335;
        bool r487368 = r487366 <= r487367;
        double r487369 = 0.4178382122737707;
        bool r487370 = r487366 <= r487369;
        double r487371 = !r487370;
        bool r487372 = r487368 || r487371;
        double r487373 = 4.0;
        double r487374 = r487366 * r487366;
        double r487375 = 1.0;
        double r487376 = r487375 + r487366;
        double r487377 = b;
        double r487378 = r487377 * r487377;
        double r487379 = 3.0;
        double r487380 = r487379 * r487366;
        double r487381 = r487375 - r487380;
        double r487382 = r487378 * r487381;
        double r487383 = fma(r487374, r487376, r487382);
        double r487384 = r487374 + r487378;
        double r487385 = 2.0;
        double r487386 = pow(r487384, r487385);
        double r487387 = r487386 - r487375;
        double r487388 = fma(r487373, r487383, r487387);
        double r487389 = sqrt(r487388);
        double r487390 = r487389 * r487389;
        double r487391 = 2.0;
        double r487392 = pow(r487366, r487391);
        double r487393 = r487385 * r487392;
        double r487394 = pow(r487377, r487391);
        double r487395 = 4.0;
        double r487396 = pow(r487377, r487395);
        double r487397 = fma(r487393, r487394, r487396);
        double r487398 = r487397 - r487375;
        double r487399 = fma(r487373, r487383, r487398);
        double r487400 = r487372 ? r487390 : r487399;
        return r487400;
}

Error

Bits error versus a

Bits error versus b

Derivation

  1. Split input into 2 regimes
  2. if a < -2.403938157532335 or 0.4178382122737707 < 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. Simplified0.5

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

    if -2.403938157532335 < a < 0.4178382122737707

    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. Simplified0.1

      \[\leadsto \color{blue}{\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(a \cdot a + b \cdot b\right)}^{2} - 1\right)}\]
    3. Taylor expanded around 0 0.3

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;a \le -2.4039381575323349 \lor \neg \left(a \le 0.41783821227377071\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(a \cdot a + b \cdot b\right)}^{2} - 1\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(a \cdot a + b \cdot b\right)}^{2} - 1\right)}\\ \mathbf{else}:\\ \;\;\;\;\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), \mathsf{fma}\left(2 \cdot {a}^{2}, {b}^{2}, {b}^{4}\right) - 1\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020046 +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))