Average Error: 5.6 → 2.7
Time: 1.0m
Precision: 64
\[\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k\]
\[\begin{array}{l} \mathbf{if}\;t \le -7702228306921125838848:\\ \;\;\;\;\left(\left(b \cdot c + \left(\left(z \cdot \left(\left(y \cdot x\right) \cdot 18\right)\right) \cdot t - t \cdot \left(a \cdot 4\right)\right)\right) - \left(x \cdot 4\right) \cdot i\right) - j \cdot \left(27 \cdot k\right)\\ \mathbf{elif}\;t \le 1.806883127258244205731970851622029403045 \cdot 10^{-164}:\\ \;\;\;\;\mathsf{fma}\left(y \cdot \left(\left(18 \cdot t\right) \cdot x\right), z, b \cdot c - \mathsf{fma}\left(4, \mathsf{fma}\left(t, a, i \cdot x\right), \left(j \cdot k\right) \cdot 27\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\left(b \cdot c + \left(18 \cdot \left(t \cdot \left(x \cdot \left(y \cdot z\right)\right)\right) - t \cdot \left(a \cdot 4\right)\right)\right) - \left(x \cdot 4\right) \cdot i\right) - k \cdot \left(j \cdot 27\right)\\ \end{array}\]
\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k
\begin{array}{l}
\mathbf{if}\;t \le -7702228306921125838848:\\
\;\;\;\;\left(\left(b \cdot c + \left(\left(z \cdot \left(\left(y \cdot x\right) \cdot 18\right)\right) \cdot t - t \cdot \left(a \cdot 4\right)\right)\right) - \left(x \cdot 4\right) \cdot i\right) - j \cdot \left(27 \cdot k\right)\\

\mathbf{elif}\;t \le 1.806883127258244205731970851622029403045 \cdot 10^{-164}:\\
\;\;\;\;\mathsf{fma}\left(y \cdot \left(\left(18 \cdot t\right) \cdot x\right), z, b \cdot c - \mathsf{fma}\left(4, \mathsf{fma}\left(t, a, i \cdot x\right), \left(j \cdot k\right) \cdot 27\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\left(\left(b \cdot c + \left(18 \cdot \left(t \cdot \left(x \cdot \left(y \cdot z\right)\right)\right) - t \cdot \left(a \cdot 4\right)\right)\right) - \left(x \cdot 4\right) \cdot i\right) - k \cdot \left(j \cdot 27\right)\\

\end{array}
double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
        double r4554789 = x;
        double r4554790 = 18.0;
        double r4554791 = r4554789 * r4554790;
        double r4554792 = y;
        double r4554793 = r4554791 * r4554792;
        double r4554794 = z;
        double r4554795 = r4554793 * r4554794;
        double r4554796 = t;
        double r4554797 = r4554795 * r4554796;
        double r4554798 = a;
        double r4554799 = 4.0;
        double r4554800 = r4554798 * r4554799;
        double r4554801 = r4554800 * r4554796;
        double r4554802 = r4554797 - r4554801;
        double r4554803 = b;
        double r4554804 = c;
        double r4554805 = r4554803 * r4554804;
        double r4554806 = r4554802 + r4554805;
        double r4554807 = r4554789 * r4554799;
        double r4554808 = i;
        double r4554809 = r4554807 * r4554808;
        double r4554810 = r4554806 - r4554809;
        double r4554811 = j;
        double r4554812 = 27.0;
        double r4554813 = r4554811 * r4554812;
        double r4554814 = k;
        double r4554815 = r4554813 * r4554814;
        double r4554816 = r4554810 - r4554815;
        return r4554816;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
        double r4554817 = t;
        double r4554818 = -7.702228306921126e+21;
        bool r4554819 = r4554817 <= r4554818;
        double r4554820 = b;
        double r4554821 = c;
        double r4554822 = r4554820 * r4554821;
        double r4554823 = z;
        double r4554824 = y;
        double r4554825 = x;
        double r4554826 = r4554824 * r4554825;
        double r4554827 = 18.0;
        double r4554828 = r4554826 * r4554827;
        double r4554829 = r4554823 * r4554828;
        double r4554830 = r4554829 * r4554817;
        double r4554831 = a;
        double r4554832 = 4.0;
        double r4554833 = r4554831 * r4554832;
        double r4554834 = r4554817 * r4554833;
        double r4554835 = r4554830 - r4554834;
        double r4554836 = r4554822 + r4554835;
        double r4554837 = r4554825 * r4554832;
        double r4554838 = i;
        double r4554839 = r4554837 * r4554838;
        double r4554840 = r4554836 - r4554839;
        double r4554841 = j;
        double r4554842 = 27.0;
        double r4554843 = k;
        double r4554844 = r4554842 * r4554843;
        double r4554845 = r4554841 * r4554844;
        double r4554846 = r4554840 - r4554845;
        double r4554847 = 1.8068831272582442e-164;
        bool r4554848 = r4554817 <= r4554847;
        double r4554849 = r4554827 * r4554817;
        double r4554850 = r4554849 * r4554825;
        double r4554851 = r4554824 * r4554850;
        double r4554852 = r4554838 * r4554825;
        double r4554853 = fma(r4554817, r4554831, r4554852);
        double r4554854 = r4554841 * r4554843;
        double r4554855 = r4554854 * r4554842;
        double r4554856 = fma(r4554832, r4554853, r4554855);
        double r4554857 = r4554822 - r4554856;
        double r4554858 = fma(r4554851, r4554823, r4554857);
        double r4554859 = r4554824 * r4554823;
        double r4554860 = r4554825 * r4554859;
        double r4554861 = r4554817 * r4554860;
        double r4554862 = r4554827 * r4554861;
        double r4554863 = r4554862 - r4554834;
        double r4554864 = r4554822 + r4554863;
        double r4554865 = r4554864 - r4554839;
        double r4554866 = r4554841 * r4554842;
        double r4554867 = r4554843 * r4554866;
        double r4554868 = r4554865 - r4554867;
        double r4554869 = r4554848 ? r4554858 : r4554868;
        double r4554870 = r4554819 ? r4554846 : r4554869;
        return r4554870;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Bits error versus b

Bits error versus c

Bits error versus i

Bits error versus j

Bits error versus k

Derivation

  1. Split input into 3 regimes
  2. if t < -7.702228306921126e+21

    1. Initial program 2.1

      \[\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k\]
    2. Taylor expanded around 0 2.1

      \[\leadsto \left(\left(\left(\left(\color{blue}{\left(18 \cdot \left(x \cdot y\right)\right)} \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k\]
    3. Using strategy rm
    4. Applied associate-*l*2.1

      \[\leadsto \left(\left(\left(\left(\left(18 \cdot \left(x \cdot y\right)\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \color{blue}{j \cdot \left(27 \cdot k\right)}\]

    if -7.702228306921126e+21 < t < 1.8068831272582442e-164

    1. Initial program 8.2

      \[\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k\]
    2. Simplified4.2

      \[\leadsto \color{blue}{\mathsf{fma}\left(\left(\left(y \cdot x\right) \cdot 18\right) \cdot t, z, b \cdot c - \mathsf{fma}\left(4, \mathsf{fma}\left(t, a, i \cdot x\right), 27 \cdot \left(k \cdot j\right)\right)\right)}\]
    3. Using strategy rm
    4. Applied associate-*l*4.2

      \[\leadsto \mathsf{fma}\left(\color{blue}{\left(y \cdot x\right) \cdot \left(18 \cdot t\right)}, z, b \cdot c - \mathsf{fma}\left(4, \mathsf{fma}\left(t, a, i \cdot x\right), 27 \cdot \left(k \cdot j\right)\right)\right)\]
    5. Using strategy rm
    6. Applied associate-*l*1.6

      \[\leadsto \mathsf{fma}\left(\color{blue}{y \cdot \left(x \cdot \left(18 \cdot t\right)\right)}, z, b \cdot c - \mathsf{fma}\left(4, \mathsf{fma}\left(t, a, i \cdot x\right), 27 \cdot \left(k \cdot j\right)\right)\right)\]

    if 1.8068831272582442e-164 < t

    1. Initial program 3.8

      \[\left(\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot z\right) \cdot t - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k\]
    2. Taylor expanded around inf 4.4

      \[\leadsto \left(\left(\left(\color{blue}{18 \cdot \left(t \cdot \left(x \cdot \left(z \cdot y\right)\right)\right)} - \left(a \cdot 4\right) \cdot t\right) + b \cdot c\right) - \left(x \cdot 4\right) \cdot i\right) - \left(j \cdot 27\right) \cdot k\]
  3. Recombined 3 regimes into one program.
  4. Final simplification2.7

    \[\leadsto \begin{array}{l} \mathbf{if}\;t \le -7702228306921125838848:\\ \;\;\;\;\left(\left(b \cdot c + \left(\left(z \cdot \left(\left(y \cdot x\right) \cdot 18\right)\right) \cdot t - t \cdot \left(a \cdot 4\right)\right)\right) - \left(x \cdot 4\right) \cdot i\right) - j \cdot \left(27 \cdot k\right)\\ \mathbf{elif}\;t \le 1.806883127258244205731970851622029403045 \cdot 10^{-164}:\\ \;\;\;\;\mathsf{fma}\left(y \cdot \left(\left(18 \cdot t\right) \cdot x\right), z, b \cdot c - \mathsf{fma}\left(4, \mathsf{fma}\left(t, a, i \cdot x\right), \left(j \cdot k\right) \cdot 27\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\left(b \cdot c + \left(18 \cdot \left(t \cdot \left(x \cdot \left(y \cdot z\right)\right)\right) - t \cdot \left(a \cdot 4\right)\right)\right) - \left(x \cdot 4\right) \cdot i\right) - k \cdot \left(j \cdot 27\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019200 +o rules:numerics
(FPCore (x y z t a b c i j k)
  :name "Diagrams.Solve.Polynomial:cubForm  from diagrams-solve-0.1"
  (- (- (+ (- (* (* (* (* x 18.0) y) z) t) (* (* a 4.0) t)) (* b c)) (* (* x 4.0) i)) (* (* j 27.0) k)))