Average Error: 5.6 → 3.8
Time: 13.8s
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 -1.6966996671020817 \cdot 10^{-102} \lor \neg \left(t \le 1.14074283942728159 \cdot 10^{-25}\right):\\ \;\;\;\;\mathsf{fma}\left(t, \left(x \cdot 18\right) \cdot \left(y \cdot z\right) - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, j \cdot \left(27 \cdot k\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot \left(z \cdot t\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\\ \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 -1.6966996671020817 \cdot 10^{-102} \lor \neg \left(t \le 1.14074283942728159 \cdot 10^{-25}\right):\\
\;\;\;\;\mathsf{fma}\left(t, \left(x \cdot 18\right) \cdot \left(y \cdot z\right) - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, j \cdot \left(27 \cdot k\right)\right)\right)\\

\mathbf{else}:\\
\;\;\;\;\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot \left(z \cdot t\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\\

\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 r116787 = x;
        double r116788 = 18.0;
        double r116789 = r116787 * r116788;
        double r116790 = y;
        double r116791 = r116789 * r116790;
        double r116792 = z;
        double r116793 = r116791 * r116792;
        double r116794 = t;
        double r116795 = r116793 * r116794;
        double r116796 = a;
        double r116797 = 4.0;
        double r116798 = r116796 * r116797;
        double r116799 = r116798 * r116794;
        double r116800 = r116795 - r116799;
        double r116801 = b;
        double r116802 = c;
        double r116803 = r116801 * r116802;
        double r116804 = r116800 + r116803;
        double r116805 = r116787 * r116797;
        double r116806 = i;
        double r116807 = r116805 * r116806;
        double r116808 = r116804 - r116807;
        double r116809 = j;
        double r116810 = 27.0;
        double r116811 = r116809 * r116810;
        double r116812 = k;
        double r116813 = r116811 * r116812;
        double r116814 = r116808 - r116813;
        return r116814;
}

double f(double x, double y, double z, double t, double a, double b, double c, double i, double j, double k) {
        double r116815 = t;
        double r116816 = -1.6966996671020817e-102;
        bool r116817 = r116815 <= r116816;
        double r116818 = 1.1407428394272816e-25;
        bool r116819 = r116815 <= r116818;
        double r116820 = !r116819;
        bool r116821 = r116817 || r116820;
        double r116822 = x;
        double r116823 = 18.0;
        double r116824 = r116822 * r116823;
        double r116825 = y;
        double r116826 = z;
        double r116827 = r116825 * r116826;
        double r116828 = r116824 * r116827;
        double r116829 = a;
        double r116830 = 4.0;
        double r116831 = r116829 * r116830;
        double r116832 = r116828 - r116831;
        double r116833 = b;
        double r116834 = c;
        double r116835 = r116833 * r116834;
        double r116836 = i;
        double r116837 = r116830 * r116836;
        double r116838 = j;
        double r116839 = 27.0;
        double r116840 = k;
        double r116841 = r116839 * r116840;
        double r116842 = r116838 * r116841;
        double r116843 = fma(r116822, r116837, r116842);
        double r116844 = r116835 - r116843;
        double r116845 = fma(r116815, r116832, r116844);
        double r116846 = r116824 * r116825;
        double r116847 = r116826 * r116815;
        double r116848 = r116846 * r116847;
        double r116849 = r116831 * r116815;
        double r116850 = r116848 - r116849;
        double r116851 = r116850 + r116835;
        double r116852 = r116822 * r116830;
        double r116853 = r116852 * r116836;
        double r116854 = r116851 - r116853;
        double r116855 = r116838 * r116839;
        double r116856 = r116855 * r116840;
        double r116857 = r116854 - r116856;
        double r116858 = r116821 ? r116845 : r116857;
        return r116858;
}

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 2 regimes
  2. if t < -1.6966996671020817e-102 or 1.1407428394272816e-25 < t

    1. Initial program 2.4

      \[\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. Simplified2.4

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

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

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

    if -1.6966996671020817e-102 < t < 1.1407428394272816e-25

    1. Initial program 8.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. Using strategy rm
    3. Applied associate-*l*4.6

      \[\leadsto \left(\left(\left(\color{blue}{\left(\left(x \cdot 18\right) \cdot y\right) \cdot \left(z \cdot t\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 2 regimes into one program.
  4. Final simplification3.8

    \[\leadsto \begin{array}{l} \mathbf{if}\;t \le -1.6966996671020817 \cdot 10^{-102} \lor \neg \left(t \le 1.14074283942728159 \cdot 10^{-25}\right):\\ \;\;\;\;\mathsf{fma}\left(t, \left(x \cdot 18\right) \cdot \left(y \cdot z\right) - a \cdot 4, b \cdot c - \mathsf{fma}\left(x, 4 \cdot i, j \cdot \left(27 \cdot k\right)\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(\left(\left(\left(\left(x \cdot 18\right) \cdot y\right) \cdot \left(z \cdot t\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\\ \end{array}\]

Reproduce

herbie shell --seed 2020049 +o rules:numerics
(FPCore (x y z t a b c i j k)
  :name "Diagrams.Solve.Polynomial:cubForm  from diagrams-solve-0.1"
  :precision binary64
  (- (- (+ (- (* (* (* (* x 18) y) z) t) (* (* a 4) t)) (* b c)) (* (* x 4) i)) (* (* j 27) k)))