Average Error: 29.7 → 18.9
Time: 5.8s
Precision: 64
\[\sqrt[3]{x + 1} - \sqrt[3]{x}\]
\[\begin{array}{l} \mathbf{if}\;x \le -4.4628901123669468 \cdot 10^{61} \lor \neg \left(x \le 3285.3368488500055\right):\\ \;\;\;\;\mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{fma}\left({\left(\frac{1}{{x}^{2}}\right)}^{\frac{1}{3}}, 0.333333333333333315, 0.061728395061728392 \cdot {\left(\frac{1}{{x}^{8}}\right)}^{\frac{1}{3}} - 0.1111111111111111 \cdot {\left(\frac{1}{{x}^{5}}\right)}^{\frac{1}{3}}\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\sqrt[3]{\frac{\sqrt[3]{{x}^{3} + {1}^{3}} \cdot \sqrt[3]{x \cdot x - 1 \cdot 1}}{\sqrt[3]{x \cdot x + \left(1 \cdot 1 - x \cdot 1\right)} \cdot \sqrt[3]{x - 1}}}, \sqrt[3]{\sqrt[3]{x + 1}}, -\sqrt[3]{x}\right)\\ \end{array}\]
\sqrt[3]{x + 1} - \sqrt[3]{x}
\begin{array}{l}
\mathbf{if}\;x \le -4.4628901123669468 \cdot 10^{61} \lor \neg \left(x \le 3285.3368488500055\right):\\
\;\;\;\;\mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{fma}\left({\left(\frac{1}{{x}^{2}}\right)}^{\frac{1}{3}}, 0.333333333333333315, 0.061728395061728392 \cdot {\left(\frac{1}{{x}^{8}}\right)}^{\frac{1}{3}} - 0.1111111111111111 \cdot {\left(\frac{1}{{x}^{5}}\right)}^{\frac{1}{3}}\right)\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\sqrt[3]{\frac{\sqrt[3]{{x}^{3} + {1}^{3}} \cdot \sqrt[3]{x \cdot x - 1 \cdot 1}}{\sqrt[3]{x \cdot x + \left(1 \cdot 1 - x \cdot 1\right)} \cdot \sqrt[3]{x - 1}}}, \sqrt[3]{\sqrt[3]{x + 1}}, -\sqrt[3]{x}\right)\\

\end{array}
double f(double x) {
        double r61085 = x;
        double r61086 = 1.0;
        double r61087 = r61085 + r61086;
        double r61088 = cbrt(r61087);
        double r61089 = cbrt(r61085);
        double r61090 = r61088 - r61089;
        return r61090;
}

double f(double x) {
        double r61091 = x;
        double r61092 = -4.462890112366947e+61;
        bool r61093 = r61091 <= r61092;
        double r61094 = 3285.3368488500055;
        bool r61095 = r61091 <= r61094;
        double r61096 = !r61095;
        bool r61097 = r61093 || r61096;
        double r61098 = 1.0;
        double r61099 = 2.0;
        double r61100 = pow(r61091, r61099);
        double r61101 = r61098 / r61100;
        double r61102 = 0.3333333333333333;
        double r61103 = pow(r61101, r61102);
        double r61104 = 0.3333333333333333;
        double r61105 = 0.06172839506172839;
        double r61106 = 8.0;
        double r61107 = pow(r61091, r61106);
        double r61108 = r61098 / r61107;
        double r61109 = pow(r61108, r61102);
        double r61110 = r61105 * r61109;
        double r61111 = 0.1111111111111111;
        double r61112 = 5.0;
        double r61113 = pow(r61091, r61112);
        double r61114 = r61098 / r61113;
        double r61115 = pow(r61114, r61102);
        double r61116 = r61111 * r61115;
        double r61117 = r61110 - r61116;
        double r61118 = fma(r61103, r61104, r61117);
        double r61119 = log1p(r61118);
        double r61120 = expm1(r61119);
        double r61121 = 3.0;
        double r61122 = pow(r61091, r61121);
        double r61123 = 1.0;
        double r61124 = pow(r61123, r61121);
        double r61125 = r61122 + r61124;
        double r61126 = cbrt(r61125);
        double r61127 = r61091 * r61091;
        double r61128 = r61123 * r61123;
        double r61129 = r61127 - r61128;
        double r61130 = cbrt(r61129);
        double r61131 = r61126 * r61130;
        double r61132 = r61091 * r61123;
        double r61133 = r61128 - r61132;
        double r61134 = r61127 + r61133;
        double r61135 = cbrt(r61134);
        double r61136 = r61091 - r61123;
        double r61137 = cbrt(r61136);
        double r61138 = r61135 * r61137;
        double r61139 = r61131 / r61138;
        double r61140 = cbrt(r61139);
        double r61141 = r61091 + r61123;
        double r61142 = cbrt(r61141);
        double r61143 = cbrt(r61142);
        double r61144 = cbrt(r61091);
        double r61145 = -r61144;
        double r61146 = fma(r61140, r61143, r61145);
        double r61147 = r61097 ? r61120 : r61146;
        return r61147;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -4.462890112366947e+61 or 3285.3368488500055 < x

    1. Initial program 60.6

      \[\sqrt[3]{x + 1} - \sqrt[3]{x}\]
    2. Using strategy rm
    3. Applied expm1-log1p-u60.6

      \[\leadsto \color{blue}{\mathsf{expm1}\left(\mathsf{log1p}\left(\sqrt[3]{x + 1} - \sqrt[3]{x}\right)\right)}\]
    4. Taylor expanded around inf 36.7

      \[\leadsto \mathsf{expm1}\left(\mathsf{log1p}\left(\color{blue}{\left(0.333333333333333315 \cdot {\left(\frac{1}{{x}^{2}}\right)}^{\frac{1}{3}} + 0.061728395061728392 \cdot {\left(\frac{1}{{x}^{8}}\right)}^{\frac{1}{3}}\right) - 0.1111111111111111 \cdot {\left(\frac{1}{{x}^{5}}\right)}^{\frac{1}{3}}}\right)\right)\]
    5. Simplified36.7

      \[\leadsto \mathsf{expm1}\left(\mathsf{log1p}\left(\color{blue}{\mathsf{fma}\left({\left(\frac{1}{{x}^{2}}\right)}^{\frac{1}{3}}, 0.333333333333333315, 0.061728395061728392 \cdot {\left(\frac{1}{{x}^{8}}\right)}^{\frac{1}{3}} - 0.1111111111111111 \cdot {\left(\frac{1}{{x}^{5}}\right)}^{\frac{1}{3}}\right)}\right)\right)\]

    if -4.462890112366947e+61 < x < 3285.3368488500055

    1. Initial program 4.5

      \[\sqrt[3]{x + 1} - \sqrt[3]{x}\]
    2. Using strategy rm
    3. Applied add-cube-cbrt4.5

      \[\leadsto \sqrt[3]{\color{blue}{\left(\sqrt[3]{x + 1} \cdot \sqrt[3]{x + 1}\right) \cdot \sqrt[3]{x + 1}}} - \sqrt[3]{x}\]
    4. Applied cbrt-prod4.5

      \[\leadsto \color{blue}{\sqrt[3]{\sqrt[3]{x + 1} \cdot \sqrt[3]{x + 1}} \cdot \sqrt[3]{\sqrt[3]{x + 1}}} - \sqrt[3]{x}\]
    5. Applied fma-neg4.5

      \[\leadsto \color{blue}{\mathsf{fma}\left(\sqrt[3]{\sqrt[3]{x + 1} \cdot \sqrt[3]{x + 1}}, \sqrt[3]{\sqrt[3]{x + 1}}, -\sqrt[3]{x}\right)}\]
    6. Using strategy rm
    7. Applied flip-+4.5

      \[\leadsto \mathsf{fma}\left(\sqrt[3]{\sqrt[3]{x + 1} \cdot \sqrt[3]{\color{blue}{\frac{x \cdot x - 1 \cdot 1}{x - 1}}}}, \sqrt[3]{\sqrt[3]{x + 1}}, -\sqrt[3]{x}\right)\]
    8. Applied cbrt-div4.5

      \[\leadsto \mathsf{fma}\left(\sqrt[3]{\sqrt[3]{x + 1} \cdot \color{blue}{\frac{\sqrt[3]{x \cdot x - 1 \cdot 1}}{\sqrt[3]{x - 1}}}}, \sqrt[3]{\sqrt[3]{x + 1}}, -\sqrt[3]{x}\right)\]
    9. Applied flip3-+4.5

      \[\leadsto \mathsf{fma}\left(\sqrt[3]{\sqrt[3]{\color{blue}{\frac{{x}^{3} + {1}^{3}}{x \cdot x + \left(1 \cdot 1 - x \cdot 1\right)}}} \cdot \frac{\sqrt[3]{x \cdot x - 1 \cdot 1}}{\sqrt[3]{x - 1}}}, \sqrt[3]{\sqrt[3]{x + 1}}, -\sqrt[3]{x}\right)\]
    10. Applied cbrt-div4.4

      \[\leadsto \mathsf{fma}\left(\sqrt[3]{\color{blue}{\frac{\sqrt[3]{{x}^{3} + {1}^{3}}}{\sqrt[3]{x \cdot x + \left(1 \cdot 1 - x \cdot 1\right)}}} \cdot \frac{\sqrt[3]{x \cdot x - 1 \cdot 1}}{\sqrt[3]{x - 1}}}, \sqrt[3]{\sqrt[3]{x + 1}}, -\sqrt[3]{x}\right)\]
    11. Applied frac-times4.4

      \[\leadsto \mathsf{fma}\left(\sqrt[3]{\color{blue}{\frac{\sqrt[3]{{x}^{3} + {1}^{3}} \cdot \sqrt[3]{x \cdot x - 1 \cdot 1}}{\sqrt[3]{x \cdot x + \left(1 \cdot 1 - x \cdot 1\right)} \cdot \sqrt[3]{x - 1}}}}, \sqrt[3]{\sqrt[3]{x + 1}}, -\sqrt[3]{x}\right)\]
  3. Recombined 2 regimes into one program.
  4. Final simplification18.9

    \[\leadsto \begin{array}{l} \mathbf{if}\;x \le -4.4628901123669468 \cdot 10^{61} \lor \neg \left(x \le 3285.3368488500055\right):\\ \;\;\;\;\mathsf{expm1}\left(\mathsf{log1p}\left(\mathsf{fma}\left({\left(\frac{1}{{x}^{2}}\right)}^{\frac{1}{3}}, 0.333333333333333315, 0.061728395061728392 \cdot {\left(\frac{1}{{x}^{8}}\right)}^{\frac{1}{3}} - 0.1111111111111111 \cdot {\left(\frac{1}{{x}^{5}}\right)}^{\frac{1}{3}}\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\sqrt[3]{\frac{\sqrt[3]{{x}^{3} + {1}^{3}} \cdot \sqrt[3]{x \cdot x - 1 \cdot 1}}{\sqrt[3]{x \cdot x + \left(1 \cdot 1 - x \cdot 1\right)} \cdot \sqrt[3]{x - 1}}}, \sqrt[3]{\sqrt[3]{x + 1}}, -\sqrt[3]{x}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020062 +o rules:numerics
(FPCore (x)
  :name "2cbrt (problem 3.3.4)"
  :precision binary64
  (- (cbrt (+ x 1)) (cbrt x)))