Average Error: 0.2 → 1.5
Time: 3.0s
Precision: 64
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(b \cdot b\right)\right) - 1\]
\[\begin{array}{l} \mathbf{if}\;b \le -2.424660216443879 \cdot 10^{-4} \lor \neg \left(b \le 6.0217316868572142 \cdot 10^{-5}\right):\\ \;\;\;\;\left(\mathsf{fma}\left(2 \cdot {a}^{2}, {b}^{2}, {b}^{4}\right) + 4 \cdot \left(b \cdot b\right)\right) - 1\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left({b}^{2}, 4 + 2 \cdot {a}^{2}, {a}^{4}\right) - 1\\ \end{array}\]
\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(b \cdot b\right)\right) - 1
\begin{array}{l}
\mathbf{if}\;b \le -2.424660216443879 \cdot 10^{-4} \lor \neg \left(b \le 6.0217316868572142 \cdot 10^{-5}\right):\\
\;\;\;\;\left(\mathsf{fma}\left(2 \cdot {a}^{2}, {b}^{2}, {b}^{4}\right) + 4 \cdot \left(b \cdot b\right)\right) - 1\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left({b}^{2}, 4 + 2 \cdot {a}^{2}, {a}^{4}\right) - 1\\

\end{array}
double f(double a, double b) {
        double r310976 = a;
        double r310977 = r310976 * r310976;
        double r310978 = b;
        double r310979 = r310978 * r310978;
        double r310980 = r310977 + r310979;
        double r310981 = 2.0;
        double r310982 = pow(r310980, r310981);
        double r310983 = 4.0;
        double r310984 = r310983 * r310979;
        double r310985 = r310982 + r310984;
        double r310986 = 1.0;
        double r310987 = r310985 - r310986;
        return r310987;
}

double f(double a, double b) {
        double r310988 = b;
        double r310989 = -0.00024246602164438788;
        bool r310990 = r310988 <= r310989;
        double r310991 = 6.021731686857214e-05;
        bool r310992 = r310988 <= r310991;
        double r310993 = !r310992;
        bool r310994 = r310990 || r310993;
        double r310995 = 2.0;
        double r310996 = a;
        double r310997 = 2.0;
        double r310998 = pow(r310996, r310997);
        double r310999 = r310995 * r310998;
        double r311000 = pow(r310988, r310997);
        double r311001 = 4.0;
        double r311002 = pow(r310988, r311001);
        double r311003 = fma(r310999, r311000, r311002);
        double r311004 = 4.0;
        double r311005 = r310988 * r310988;
        double r311006 = r311004 * r311005;
        double r311007 = r311003 + r311006;
        double r311008 = 1.0;
        double r311009 = r311007 - r311008;
        double r311010 = r310997 * r310998;
        double r311011 = r311004 + r311010;
        double r311012 = pow(r310996, r311001);
        double r311013 = fma(r311000, r311011, r311012);
        double r311014 = r311013 - r311008;
        double r311015 = r310994 ? r311009 : r311014;
        return r311015;
}

Error

Bits error versus a

Bits error versus b

Derivation

  1. Split input into 2 regimes
  2. if b < -0.00024246602164438788 or 6.021731686857214e-05 < b

    1. Initial program 0.5

      \[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(b \cdot b\right)\right) - 1\]
    2. Taylor expanded around 0 6.5

      \[\leadsto \left(\color{blue}{\left({b}^{4} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right)} + 4 \cdot \left(b \cdot b\right)\right) - 1\]
    3. Simplified6.5

      \[\leadsto \left(\color{blue}{\mathsf{fma}\left(2 \cdot {a}^{2}, {b}^{2}, {b}^{4}\right)} + 4 \cdot \left(b \cdot b\right)\right) - 1\]

    if -0.00024246602164438788 < b < 6.021731686857214e-05

    1. Initial program 0.1

      \[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(b \cdot b\right)\right) - 1\]
    2. Taylor expanded around 0 0.0

      \[\leadsto \color{blue}{\left({a}^{4} + \left(4 \cdot {b}^{2} + 2 \cdot \left({a}^{2} \cdot {b}^{2}\right)\right)\right)} - 1\]
    3. Simplified0.0

      \[\leadsto \color{blue}{\mathsf{fma}\left({b}^{2}, 4 + 2 \cdot {a}^{2}, {a}^{4}\right)} - 1\]
  3. Recombined 2 regimes into one program.
  4. Final simplification1.5

    \[\leadsto \begin{array}{l} \mathbf{if}\;b \le -2.424660216443879 \cdot 10^{-4} \lor \neg \left(b \le 6.0217316868572142 \cdot 10^{-5}\right):\\ \;\;\;\;\left(\mathsf{fma}\left(2 \cdot {a}^{2}, {b}^{2}, {b}^{4}\right) + 4 \cdot \left(b \cdot b\right)\right) - 1\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left({b}^{2}, 4 + 2 \cdot {a}^{2}, {a}^{4}\right) - 1\\ \end{array}\]

Reproduce

herbie shell --seed 2020027 +o rules:numerics
(FPCore (a b)
  :name "Bouland and Aaronson, Equation (26)"
  :precision binary64
  (- (+ (pow (+ (* a a) (* b b)) 2) (* 4 (* b b))) 1))