Average Error: 29.6 → 18.9
Time: 5.9s
Precision: 64
\[\sqrt[3]{x + 1} - \sqrt[3]{x}\]
\[\begin{array}{l} \mathbf{if}\;x \le -4.4771775817553536 \cdot 10^{61} \lor \neg \left(x \le 7658.2932455647642\right):\\ \;\;\;\;\mathsf{log1p}\left(\mathsf{fma}\left(0.006172839506172839, \frac{1}{{x}^{2}}, \mathsf{fma}\left(0.055555555555555552, {\left(\frac{1}{{x}^{4}}\right)}^{\frac{1}{3}}, \mathsf{fma}\left(0.333333333333333315, {\left(\frac{1}{{x}^{2}}\right)}^{\frac{1}{3}}, 0.061728395061728392 \cdot {\left(\frac{1}{{x}^{8}}\right)}^{\frac{1}{3}}\right)\right) - \mathsf{fma}\left(0.1111111111111111, {\left(\frac{1}{{x}^{5}}\right)}^{\frac{1}{3}}, 0.037037037037037035 \cdot {\left(\frac{1}{{x}^{7}}\right)}^{\frac{1}{3}}\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(\sqrt[3]{\sqrt[3]{x + 1}} \cdot \sqrt[3]{\sqrt[3]{x + 1}}, \sqrt[3]{\sqrt[3]{x + 1}}, -\left(\sqrt[3]{\sqrt[3]{x}} \cdot \sqrt[3]{\sqrt[3]{x}}\right) \cdot \sqrt[3]{\sqrt[3]{x}}\right)\\ \end{array}\]
\sqrt[3]{x + 1} - \sqrt[3]{x}
\begin{array}{l}
\mathbf{if}\;x \le -4.4771775817553536 \cdot 10^{61} \lor \neg \left(x \le 7658.2932455647642\right):\\
\;\;\;\;\mathsf{log1p}\left(\mathsf{fma}\left(0.006172839506172839, \frac{1}{{x}^{2}}, \mathsf{fma}\left(0.055555555555555552, {\left(\frac{1}{{x}^{4}}\right)}^{\frac{1}{3}}, \mathsf{fma}\left(0.333333333333333315, {\left(\frac{1}{{x}^{2}}\right)}^{\frac{1}{3}}, 0.061728395061728392 \cdot {\left(\frac{1}{{x}^{8}}\right)}^{\frac{1}{3}}\right)\right) - \mathsf{fma}\left(0.1111111111111111, {\left(\frac{1}{{x}^{5}}\right)}^{\frac{1}{3}}, 0.037037037037037035 \cdot {\left(\frac{1}{{x}^{7}}\right)}^{\frac{1}{3}}\right)\right)\right)\\

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

\end{array}
double f(double x) {
        double r60632 = x;
        double r60633 = 1.0;
        double r60634 = r60632 + r60633;
        double r60635 = cbrt(r60634);
        double r60636 = cbrt(r60632);
        double r60637 = r60635 - r60636;
        return r60637;
}

double f(double x) {
        double r60638 = x;
        double r60639 = -4.4771775817553536e+61;
        bool r60640 = r60638 <= r60639;
        double r60641 = 7658.293245564764;
        bool r60642 = r60638 <= r60641;
        double r60643 = !r60642;
        bool r60644 = r60640 || r60643;
        double r60645 = 0.006172839506172839;
        double r60646 = 1.0;
        double r60647 = 2.0;
        double r60648 = pow(r60638, r60647);
        double r60649 = r60646 / r60648;
        double r60650 = 0.05555555555555555;
        double r60651 = 4.0;
        double r60652 = pow(r60638, r60651);
        double r60653 = r60646 / r60652;
        double r60654 = 0.3333333333333333;
        double r60655 = pow(r60653, r60654);
        double r60656 = 0.3333333333333333;
        double r60657 = pow(r60649, r60654);
        double r60658 = 0.06172839506172839;
        double r60659 = 8.0;
        double r60660 = pow(r60638, r60659);
        double r60661 = r60646 / r60660;
        double r60662 = pow(r60661, r60654);
        double r60663 = r60658 * r60662;
        double r60664 = fma(r60656, r60657, r60663);
        double r60665 = fma(r60650, r60655, r60664);
        double r60666 = 0.1111111111111111;
        double r60667 = 5.0;
        double r60668 = pow(r60638, r60667);
        double r60669 = r60646 / r60668;
        double r60670 = pow(r60669, r60654);
        double r60671 = 0.037037037037037035;
        double r60672 = 7.0;
        double r60673 = pow(r60638, r60672);
        double r60674 = r60646 / r60673;
        double r60675 = pow(r60674, r60654);
        double r60676 = r60671 * r60675;
        double r60677 = fma(r60666, r60670, r60676);
        double r60678 = r60665 - r60677;
        double r60679 = fma(r60645, r60649, r60678);
        double r60680 = log1p(r60679);
        double r60681 = 1.0;
        double r60682 = r60638 + r60681;
        double r60683 = cbrt(r60682);
        double r60684 = cbrt(r60683);
        double r60685 = r60684 * r60684;
        double r60686 = cbrt(r60638);
        double r60687 = cbrt(r60686);
        double r60688 = r60687 * r60687;
        double r60689 = r60688 * r60687;
        double r60690 = -r60689;
        double r60691 = fma(r60685, r60684, r60690);
        double r60692 = r60644 ? r60680 : r60691;
        return r60692;
}

Error

Bits error versus x

Derivation

  1. Split input into 2 regimes
  2. if x < -4.4771775817553536e+61 or 7658.293245564764 < x

    1. Initial program 60.5

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

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

      \[\leadsto \mathsf{log1p}\left(\color{blue}{\left(0.006172839506172839 \cdot \frac{1}{{x}^{2}} + \left(0.055555555555555552 \cdot {\left(\frac{1}{{x}^{4}}\right)}^{\frac{1}{3}} + \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)\right)\right) - \left(0.1111111111111111 \cdot {\left(\frac{1}{{x}^{5}}\right)}^{\frac{1}{3}} + 0.037037037037037035 \cdot {\left(\frac{1}{{x}^{7}}\right)}^{\frac{1}{3}}\right)}\right)\]
    5. Simplified36.4

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

    if -4.4771775817553536e+61 < x < 7658.293245564764

    1. Initial program 5.3

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

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

      \[\leadsto \color{blue}{\mathsf{fma}\left(\sqrt[3]{\sqrt[3]{x + 1}} \cdot \sqrt[3]{\sqrt[3]{x + 1}}, \sqrt[3]{\sqrt[3]{x + 1}}, -\sqrt[3]{x}\right)}\]
    5. Using strategy rm
    6. Applied add-cube-cbrt5.2

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

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

Reproduce

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