Average Error: 7.1 → 2.9
Time: 3.1s
Precision: 64
\[\left(x \cdot y - z \cdot y\right) \cdot t\]
\[\begin{array}{l} \mathbf{if}\;y \le -3.9370635120425994 \cdot 10^{-9} \lor \neg \left(y \le 46208978636311126000\right):\\ \;\;\;\;\left(t \cdot \left(1 \cdot {\left(\sqrt[3]{x}\right)}^{3} + \left(-z\right)\right)\right) \cdot y + \left(y \cdot \mathsf{fma}\left(-z, 1, z\right)\right) \cdot t\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(t, x \cdot y, \left(\sqrt[3]{t \cdot \left(\left(-z\right) \cdot y\right)} \cdot \sqrt[3]{t \cdot \left(\left(-z\right) \cdot y\right)}\right) \cdot \sqrt[3]{t \cdot \left(\left(-z\right) \cdot y\right)}\right)\\ \end{array}\]
\left(x \cdot y - z \cdot y\right) \cdot t
\begin{array}{l}
\mathbf{if}\;y \le -3.9370635120425994 \cdot 10^{-9} \lor \neg \left(y \le 46208978636311126000\right):\\
\;\;\;\;\left(t \cdot \left(1 \cdot {\left(\sqrt[3]{x}\right)}^{3} + \left(-z\right)\right)\right) \cdot y + \left(y \cdot \mathsf{fma}\left(-z, 1, z\right)\right) \cdot t\\

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

\end{array}
double f(double x, double y, double z, double t) {
        double r539181 = x;
        double r539182 = y;
        double r539183 = r539181 * r539182;
        double r539184 = z;
        double r539185 = r539184 * r539182;
        double r539186 = r539183 - r539185;
        double r539187 = t;
        double r539188 = r539186 * r539187;
        return r539188;
}

double f(double x, double y, double z, double t) {
        double r539189 = y;
        double r539190 = -3.9370635120425994e-09;
        bool r539191 = r539189 <= r539190;
        double r539192 = 4.620897863631113e+19;
        bool r539193 = r539189 <= r539192;
        double r539194 = !r539193;
        bool r539195 = r539191 || r539194;
        double r539196 = t;
        double r539197 = 1.0;
        double r539198 = x;
        double r539199 = cbrt(r539198);
        double r539200 = 3.0;
        double r539201 = pow(r539199, r539200);
        double r539202 = r539197 * r539201;
        double r539203 = z;
        double r539204 = -r539203;
        double r539205 = r539202 + r539204;
        double r539206 = r539196 * r539205;
        double r539207 = r539206 * r539189;
        double r539208 = fma(r539204, r539197, r539203);
        double r539209 = r539189 * r539208;
        double r539210 = r539209 * r539196;
        double r539211 = r539207 + r539210;
        double r539212 = r539198 * r539189;
        double r539213 = r539204 * r539189;
        double r539214 = r539196 * r539213;
        double r539215 = cbrt(r539214);
        double r539216 = r539215 * r539215;
        double r539217 = r539216 * r539215;
        double r539218 = fma(r539196, r539212, r539217);
        double r539219 = r539195 ? r539211 : r539218;
        return r539219;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original7.1
Target3.2
Herbie2.9
\[\begin{array}{l} \mathbf{if}\;t \lt -9.2318795828867769 \cdot 10^{-80}:\\ \;\;\;\;\left(y \cdot t\right) \cdot \left(x - z\right)\\ \mathbf{elif}\;t \lt 2.5430670515648771 \cdot 10^{83}:\\ \;\;\;\;y \cdot \left(t \cdot \left(x - z\right)\right)\\ \mathbf{else}:\\ \;\;\;\;\left(y \cdot \left(x - z\right)\right) \cdot t\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if y < -3.9370635120425994e-09 or 4.620897863631113e+19 < y

    1. Initial program 15.7

      \[\left(x \cdot y - z \cdot y\right) \cdot t\]
    2. Simplified15.7

      \[\leadsto \color{blue}{t \cdot \left(y \cdot \left(x - z\right)\right)}\]
    3. Using strategy rm
    4. Applied add-cube-cbrt16.1

      \[\leadsto t \cdot \left(y \cdot \left(x - \color{blue}{\left(\sqrt[3]{z} \cdot \sqrt[3]{z}\right) \cdot \sqrt[3]{z}}\right)\right)\]
    5. Applied add-cube-cbrt16.5

      \[\leadsto t \cdot \left(y \cdot \left(\color{blue}{\left(\sqrt[3]{x} \cdot \sqrt[3]{x}\right) \cdot \sqrt[3]{x}} - \left(\sqrt[3]{z} \cdot \sqrt[3]{z}\right) \cdot \sqrt[3]{z}\right)\right)\]
    6. Applied prod-diff16.5

      \[\leadsto t \cdot \left(y \cdot \color{blue}{\left(\mathsf{fma}\left(\sqrt[3]{x} \cdot \sqrt[3]{x}, \sqrt[3]{x}, -\sqrt[3]{z} \cdot \left(\sqrt[3]{z} \cdot \sqrt[3]{z}\right)\right) + \mathsf{fma}\left(-\sqrt[3]{z}, \sqrt[3]{z} \cdot \sqrt[3]{z}, \sqrt[3]{z} \cdot \left(\sqrt[3]{z} \cdot \sqrt[3]{z}\right)\right)\right)}\right)\]
    7. Applied distribute-lft-in16.5

      \[\leadsto t \cdot \color{blue}{\left(y \cdot \mathsf{fma}\left(\sqrt[3]{x} \cdot \sqrt[3]{x}, \sqrt[3]{x}, -\sqrt[3]{z} \cdot \left(\sqrt[3]{z} \cdot \sqrt[3]{z}\right)\right) + y \cdot \mathsf{fma}\left(-\sqrt[3]{z}, \sqrt[3]{z} \cdot \sqrt[3]{z}, \sqrt[3]{z} \cdot \left(\sqrt[3]{z} \cdot \sqrt[3]{z}\right)\right)\right)}\]
    8. Applied distribute-lft-in16.5

      \[\leadsto \color{blue}{t \cdot \left(y \cdot \mathsf{fma}\left(\sqrt[3]{x} \cdot \sqrt[3]{x}, \sqrt[3]{x}, -\sqrt[3]{z} \cdot \left(\sqrt[3]{z} \cdot \sqrt[3]{z}\right)\right)\right) + t \cdot \left(y \cdot \mathsf{fma}\left(-\sqrt[3]{z}, \sqrt[3]{z} \cdot \sqrt[3]{z}, \sqrt[3]{z} \cdot \left(\sqrt[3]{z} \cdot \sqrt[3]{z}\right)\right)\right)}\]
    9. Simplified11.6

      \[\leadsto \color{blue}{\left(t \cdot \left(1 \cdot {\left(\sqrt[3]{x}\right)}^{3} + \left(-z\right)\right)\right) \cdot y} + t \cdot \left(y \cdot \mathsf{fma}\left(-\sqrt[3]{z}, \sqrt[3]{z} \cdot \sqrt[3]{z}, \sqrt[3]{z} \cdot \left(\sqrt[3]{z} \cdot \sqrt[3]{z}\right)\right)\right)\]
    10. Simplified3.8

      \[\leadsto \left(t \cdot \left(1 \cdot {\left(\sqrt[3]{x}\right)}^{3} + \left(-z\right)\right)\right) \cdot y + \color{blue}{\left(y \cdot \mathsf{fma}\left(-z, 1, z\right)\right) \cdot t}\]

    if -3.9370635120425994e-09 < y < 4.620897863631113e+19

    1. Initial program 2.0

      \[\left(x \cdot y - z \cdot y\right) \cdot t\]
    2. Simplified2.0

      \[\leadsto \color{blue}{t \cdot \left(y \cdot \left(x - z\right)\right)}\]
    3. Using strategy rm
    4. Applied sub-neg2.0

      \[\leadsto t \cdot \left(y \cdot \color{blue}{\left(x + \left(-z\right)\right)}\right)\]
    5. Applied distribute-lft-in2.0

      \[\leadsto t \cdot \color{blue}{\left(y \cdot x + y \cdot \left(-z\right)\right)}\]
    6. Applied distribute-lft-in2.0

      \[\leadsto \color{blue}{t \cdot \left(y \cdot x\right) + t \cdot \left(y \cdot \left(-z\right)\right)}\]
    7. Simplified2.0

      \[\leadsto \color{blue}{t \cdot \left(x \cdot y\right)} + t \cdot \left(y \cdot \left(-z\right)\right)\]
    8. Simplified2.0

      \[\leadsto t \cdot \left(x \cdot y\right) + \color{blue}{t \cdot \left(\left(-z\right) \cdot y\right)}\]
    9. Using strategy rm
    10. Applied fma-def2.0

      \[\leadsto \color{blue}{\mathsf{fma}\left(t, x \cdot y, t \cdot \left(\left(-z\right) \cdot y\right)\right)}\]
    11. Using strategy rm
    12. Applied add-cube-cbrt2.4

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;y \le -3.9370635120425994 \cdot 10^{-9} \lor \neg \left(y \le 46208978636311126000\right):\\ \;\;\;\;\left(t \cdot \left(1 \cdot {\left(\sqrt[3]{x}\right)}^{3} + \left(-z\right)\right)\right) \cdot y + \left(y \cdot \mathsf{fma}\left(-z, 1, z\right)\right) \cdot t\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(t, x \cdot y, \left(\sqrt[3]{t \cdot \left(\left(-z\right) \cdot y\right)} \cdot \sqrt[3]{t \cdot \left(\left(-z\right) \cdot y\right)}\right) \cdot \sqrt[3]{t \cdot \left(\left(-z\right) \cdot y\right)}\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2020083 +o rules:numerics
(FPCore (x y z t)
  :name "Linear.Projection:inverseInfinitePerspective from linear-1.19.1.3"
  :precision binary64

  :herbie-target
  (if (< t -9.231879582886777e-80) (* (* y t) (- x z)) (if (< t 2.543067051564877e+83) (* y (* t (- x z))) (* (* y (- x z)) t)))

  (* (- (* x y) (* z y)) t))