Average Error: 0.2 → 0.5
Time: 5.8s
Precision: 64
\[\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(b \cdot b\right)\right) - 1\]
\[\mathsf{fma}\left(4 \cdot b, b, \left(\sqrt[3]{{\left(a \cdot a + b \cdot b\right)}^{2}} \cdot \sqrt[3]{{\left(a \cdot a + b \cdot b\right)}^{2}}\right) \cdot \sqrt[3]{{\left(a \cdot a + b \cdot b\right)}^{2}} - 1\right)\]
\left({\left(a \cdot a + b \cdot b\right)}^{2} + 4 \cdot \left(b \cdot b\right)\right) - 1
\mathsf{fma}\left(4 \cdot b, b, \left(\sqrt[3]{{\left(a \cdot a + b \cdot b\right)}^{2}} \cdot \sqrt[3]{{\left(a \cdot a + b \cdot b\right)}^{2}}\right) \cdot \sqrt[3]{{\left(a \cdot a + b \cdot b\right)}^{2}} - 1\right)
double f(double a, double b) {
        double r297757 = a;
        double r297758 = r297757 * r297757;
        double r297759 = b;
        double r297760 = r297759 * r297759;
        double r297761 = r297758 + r297760;
        double r297762 = 2.0;
        double r297763 = pow(r297761, r297762);
        double r297764 = 4.0;
        double r297765 = r297764 * r297760;
        double r297766 = r297763 + r297765;
        double r297767 = 1.0;
        double r297768 = r297766 - r297767;
        return r297768;
}

double f(double a, double b) {
        double r297769 = 4.0;
        double r297770 = b;
        double r297771 = r297769 * r297770;
        double r297772 = a;
        double r297773 = r297772 * r297772;
        double r297774 = r297770 * r297770;
        double r297775 = r297773 + r297774;
        double r297776 = 2.0;
        double r297777 = pow(r297775, r297776);
        double r297778 = cbrt(r297777);
        double r297779 = r297778 * r297778;
        double r297780 = r297779 * r297778;
        double r297781 = 1.0;
        double r297782 = r297780 - r297781;
        double r297783 = fma(r297771, r297770, r297782);
        return r297783;
}

Error

Bits error versus a

Bits error versus b

Derivation

  1. Initial program 0.2

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

    \[\leadsto \color{blue}{\mathsf{fma}\left(4 \cdot b, b, {\left(a \cdot a + b \cdot b\right)}^{2} - 1\right)}\]
  3. Using strategy rm
  4. Applied add-cube-cbrt0.5

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

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

Reproduce

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