Average Error: 3.6 → 0.6
Time: 49.3s
Precision: 64
\[\left(x - \frac{y}{z \cdot 3}\right) + \frac{t}{\left(z \cdot 3\right) \cdot y}\]
\[\begin{array}{l} \mathbf{if}\;z \le -1.732584086606048716802629666375534253948 \cdot 10^{-30}:\\ \;\;\;\;x + \left(\frac{\frac{-y}{3}}{z} + \frac{\frac{t}{3 \cdot z}}{y}\right)\\ \mathbf{elif}\;z \le 2750296502407607091200:\\ \;\;\;\;\frac{\frac{\frac{t}{y}}{z}}{3} + \left(x - \frac{y}{3 \cdot z}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(0.3333333333333333148296162562473909929395, \frac{t}{z \cdot y} - \frac{y}{z}, x\right)\\ \end{array}\]
\left(x - \frac{y}{z \cdot 3}\right) + \frac{t}{\left(z \cdot 3\right) \cdot y}
\begin{array}{l}
\mathbf{if}\;z \le -1.732584086606048716802629666375534253948 \cdot 10^{-30}:\\
\;\;\;\;x + \left(\frac{\frac{-y}{3}}{z} + \frac{\frac{t}{3 \cdot z}}{y}\right)\\

\mathbf{elif}\;z \le 2750296502407607091200:\\
\;\;\;\;\frac{\frac{\frac{t}{y}}{z}}{3} + \left(x - \frac{y}{3 \cdot z}\right)\\

\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(0.3333333333333333148296162562473909929395, \frac{t}{z \cdot y} - \frac{y}{z}, x\right)\\

\end{array}
double f(double x, double y, double z, double t) {
        double r36201608 = x;
        double r36201609 = y;
        double r36201610 = z;
        double r36201611 = 3.0;
        double r36201612 = r36201610 * r36201611;
        double r36201613 = r36201609 / r36201612;
        double r36201614 = r36201608 - r36201613;
        double r36201615 = t;
        double r36201616 = r36201612 * r36201609;
        double r36201617 = r36201615 / r36201616;
        double r36201618 = r36201614 + r36201617;
        return r36201618;
}

double f(double x, double y, double z, double t) {
        double r36201619 = z;
        double r36201620 = -1.7325840866060487e-30;
        bool r36201621 = r36201619 <= r36201620;
        double r36201622 = x;
        double r36201623 = y;
        double r36201624 = -r36201623;
        double r36201625 = 3.0;
        double r36201626 = r36201624 / r36201625;
        double r36201627 = r36201626 / r36201619;
        double r36201628 = t;
        double r36201629 = r36201625 * r36201619;
        double r36201630 = r36201628 / r36201629;
        double r36201631 = r36201630 / r36201623;
        double r36201632 = r36201627 + r36201631;
        double r36201633 = r36201622 + r36201632;
        double r36201634 = 2.750296502407607e+21;
        bool r36201635 = r36201619 <= r36201634;
        double r36201636 = r36201628 / r36201623;
        double r36201637 = r36201636 / r36201619;
        double r36201638 = r36201637 / r36201625;
        double r36201639 = r36201623 / r36201629;
        double r36201640 = r36201622 - r36201639;
        double r36201641 = r36201638 + r36201640;
        double r36201642 = 0.3333333333333333;
        double r36201643 = r36201619 * r36201623;
        double r36201644 = r36201628 / r36201643;
        double r36201645 = r36201623 / r36201619;
        double r36201646 = r36201644 - r36201645;
        double r36201647 = fma(r36201642, r36201646, r36201622);
        double r36201648 = r36201635 ? r36201641 : r36201647;
        double r36201649 = r36201621 ? r36201633 : r36201648;
        return r36201649;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original3.6
Target1.8
Herbie0.6
\[\left(x - \frac{y}{z \cdot 3}\right) + \frac{\frac{t}{z \cdot 3}}{y}\]

Derivation

  1. Split input into 3 regimes
  2. if z < -1.7325840866060487e-30

    1. Initial program 0.4

      \[\left(x - \frac{y}{z \cdot 3}\right) + \frac{t}{\left(z \cdot 3\right) \cdot y}\]
    2. Using strategy rm
    3. Applied associate-/r*0.9

      \[\leadsto \left(x - \frac{y}{z \cdot 3}\right) + \color{blue}{\frac{\frac{t}{z \cdot 3}}{y}}\]
    4. Using strategy rm
    5. Applied div-inv1.0

      \[\leadsto \left(x - \frac{y}{z \cdot 3}\right) + \color{blue}{\frac{t}{z \cdot 3} \cdot \frac{1}{y}}\]
    6. Using strategy rm
    7. Applied sub-neg1.0

      \[\leadsto \color{blue}{\left(x + \left(-\frac{y}{z \cdot 3}\right)\right)} + \frac{t}{z \cdot 3} \cdot \frac{1}{y}\]
    8. Applied associate-+l+1.0

      \[\leadsto \color{blue}{x + \left(\left(-\frac{y}{z \cdot 3}\right) + \frac{t}{z \cdot 3} \cdot \frac{1}{y}\right)}\]
    9. Simplified0.9

      \[\leadsto x + \color{blue}{\left(\frac{\frac{t}{3 \cdot z}}{y} + \frac{\frac{-y}{3}}{z}\right)}\]

    if -1.7325840866060487e-30 < z < 2.750296502407607e+21

    1. Initial program 10.3

      \[\left(x - \frac{y}{z \cdot 3}\right) + \frac{t}{\left(z \cdot 3\right) \cdot y}\]
    2. Using strategy rm
    3. Applied associate-/r*3.3

      \[\leadsto \left(x - \frac{y}{z \cdot 3}\right) + \color{blue}{\frac{\frac{t}{z \cdot 3}}{y}}\]
    4. Using strategy rm
    5. Applied div-inv3.4

      \[\leadsto \left(x - \frac{y}{z \cdot 3}\right) + \color{blue}{\frac{t}{z \cdot 3} \cdot \frac{1}{y}}\]
    6. Using strategy rm
    7. Applied associate-/r*3.4

      \[\leadsto \left(x - \frac{y}{z \cdot 3}\right) + \color{blue}{\frac{\frac{t}{z}}{3}} \cdot \frac{1}{y}\]
    8. Using strategy rm
    9. Applied associate-*l/3.5

      \[\leadsto \left(x - \frac{y}{z \cdot 3}\right) + \color{blue}{\frac{\frac{t}{z} \cdot \frac{1}{y}}{3}}\]
    10. Simplified0.3

      \[\leadsto \left(x - \frac{y}{z \cdot 3}\right) + \frac{\color{blue}{\frac{\frac{t}{y}}{z}}}{3}\]

    if 2.750296502407607e+21 < z

    1. Initial program 0.4

      \[\left(x - \frac{y}{z \cdot 3}\right) + \frac{t}{\left(z \cdot 3\right) \cdot y}\]
    2. Using strategy rm
    3. Applied associate-/r*1.1

      \[\leadsto \left(x - \frac{y}{z \cdot 3}\right) + \color{blue}{\frac{\frac{t}{z \cdot 3}}{y}}\]
    4. Taylor expanded around 0 0.4

      \[\leadsto \color{blue}{\left(x + 0.3333333333333333148296162562473909929395 \cdot \frac{t}{z \cdot y}\right) - 0.3333333333333333148296162562473909929395 \cdot \frac{y}{z}}\]
    5. Simplified0.4

      \[\leadsto \color{blue}{\mathsf{fma}\left(0.3333333333333333148296162562473909929395, \frac{t}{y \cdot z} - \frac{y}{z}, x\right)}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification0.6

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -1.732584086606048716802629666375534253948 \cdot 10^{-30}:\\ \;\;\;\;x + \left(\frac{\frac{-y}{3}}{z} + \frac{\frac{t}{3 \cdot z}}{y}\right)\\ \mathbf{elif}\;z \le 2750296502407607091200:\\ \;\;\;\;\frac{\frac{\frac{t}{y}}{z}}{3} + \left(x - \frac{y}{3 \cdot z}\right)\\ \mathbf{else}:\\ \;\;\;\;\mathsf{fma}\left(0.3333333333333333148296162562473909929395, \frac{t}{z \cdot y} - \frac{y}{z}, x\right)\\ \end{array}\]

Reproduce

herbie shell --seed 2019168 +o rules:numerics
(FPCore (x y z t)
  :name "Diagrams.Solve.Polynomial:cubForm  from diagrams-solve-0.1, H"

  :herbie-target
  (+ (- x (/ y (* z 3.0))) (/ (/ t (* z 3.0)) y))

  (+ (- x (/ y (* z 3.0))) (/ t (* (* z 3.0) y))))