Average Error: 0.2 → 1.5
Time: 24.5s
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 r74553 = a;
        double r74554 = r74553 * r74553;
        double r74555 = b;
        double r74556 = r74555 * r74555;
        double r74557 = r74554 + r74556;
        double r74558 = 2.0;
        double r74559 = pow(r74557, r74558);
        double r74560 = 4.0;
        double r74561 = 1.0;
        double r74562 = r74561 + r74553;
        double r74563 = r74554 * r74562;
        double r74564 = 3.0;
        double r74565 = r74564 * r74553;
        double r74566 = r74561 - r74565;
        double r74567 = r74556 * r74566;
        double r74568 = r74563 + r74567;
        double r74569 = r74560 * r74568;
        double r74570 = r74559 + r74569;
        double r74571 = r74570 - r74561;
        return r74571;
}

double f(double a, double b) {
        double r74572 = a;
        double r74573 = -0.0031084792160490805;
        bool r74574 = r74572 <= r74573;
        double r74575 = 8.82997045828262e-05;
        bool r74576 = r74572 <= r74575;
        double r74577 = !r74576;
        bool r74578 = r74574 || r74577;
        double r74579 = 4.0;
        double r74580 = r74572 * r74572;
        double r74581 = 1.0;
        double r74582 = r74581 + r74572;
        double r74583 = b;
        double r74584 = r74583 * r74583;
        double r74585 = 3.0;
        double r74586 = r74585 * r74572;
        double r74587 = r74581 - r74586;
        double r74588 = r74584 * r74587;
        double r74589 = fma(r74580, r74582, r74588);
        double r74590 = -1.0;
        double r74591 = r74590 / r74572;
        double r74592 = -4.0;
        double r74593 = pow(r74591, r74592);
        double r74594 = fma(r74579, r74589, r74593);
        double r74595 = sqrt(r74594);
        double r74596 = r74595 * r74595;
        double r74597 = r74596 - r74581;
        double r74598 = 2.0;
        double r74599 = 2.0;
        double r74600 = pow(r74572, r74599);
        double r74601 = pow(r74583, r74599);
        double r74602 = r74600 * r74601;
        double r74603 = 4.0;
        double r74604 = pow(r74583, r74603);
        double r74605 = fma(r74598, r74602, r74604);
        double r74606 = r74580 * r74582;
        double r74607 = r74606 + r74588;
        double r74608 = r74579 * r74607;
        double r74609 = r74605 + r74608;
        double r74610 = r74609 - r74581;
        double r74611 = r74578 ? r74597 : r74610;
        return r74611;
}

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