Average Error: 7.6 → 3.0
Time: 15.3s
Precision: 64
\[\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\]
\[\begin{array}{l} \mathbf{if}\;z \le -3.302391226834307651764656087267345680124 \cdot 10^{-102} \lor \neg \left(z \le 1.977197034739473314773841654677642237914 \cdot 10^{-38}\right):\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{\mathsf{fma}\left(z, t, -x\right)}, z, x\right)}{x + 1} - \frac{\frac{-x}{\mathsf{fma}\left(z, -t, x\right)}}{x + 1}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{1}{\frac{t \cdot z - x}{y \cdot z - x}}}{x + 1}\\ \end{array}\]
\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}
\begin{array}{l}
\mathbf{if}\;z \le -3.302391226834307651764656087267345680124 \cdot 10^{-102} \lor \neg \left(z \le 1.977197034739473314773841654677642237914 \cdot 10^{-38}\right):\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{\mathsf{fma}\left(z, t, -x\right)}, z, x\right)}{x + 1} - \frac{\frac{-x}{\mathsf{fma}\left(z, -t, x\right)}}{x + 1}\\

\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{1}{\frac{t \cdot z - x}{y \cdot z - x}}}{x + 1}\\

\end{array}
double f(double x, double y, double z, double t) {
        double r902946 = x;
        double r902947 = y;
        double r902948 = z;
        double r902949 = r902947 * r902948;
        double r902950 = r902949 - r902946;
        double r902951 = t;
        double r902952 = r902951 * r902948;
        double r902953 = r902952 - r902946;
        double r902954 = r902950 / r902953;
        double r902955 = r902946 + r902954;
        double r902956 = 1.0;
        double r902957 = r902946 + r902956;
        double r902958 = r902955 / r902957;
        return r902958;
}

double f(double x, double y, double z, double t) {
        double r902959 = z;
        double r902960 = -3.3023912268343077e-102;
        bool r902961 = r902959 <= r902960;
        double r902962 = 1.9771970347394733e-38;
        bool r902963 = r902959 <= r902962;
        double r902964 = !r902963;
        bool r902965 = r902961 || r902964;
        double r902966 = y;
        double r902967 = t;
        double r902968 = x;
        double r902969 = -r902968;
        double r902970 = fma(r902959, r902967, r902969);
        double r902971 = r902966 / r902970;
        double r902972 = fma(r902971, r902959, r902968);
        double r902973 = 1.0;
        double r902974 = r902968 + r902973;
        double r902975 = r902972 / r902974;
        double r902976 = -r902967;
        double r902977 = fma(r902959, r902976, r902968);
        double r902978 = r902969 / r902977;
        double r902979 = r902978 / r902974;
        double r902980 = r902975 - r902979;
        double r902981 = 1.0;
        double r902982 = r902967 * r902959;
        double r902983 = r902982 - r902968;
        double r902984 = r902966 * r902959;
        double r902985 = r902984 - r902968;
        double r902986 = r902983 / r902985;
        double r902987 = r902981 / r902986;
        double r902988 = r902968 + r902987;
        double r902989 = r902988 / r902974;
        double r902990 = r902965 ? r902980 : r902989;
        return r902990;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Target

Original7.6
Target0.3
Herbie3.0
\[\frac{x + \left(\frac{y}{t - \frac{x}{z}} - \frac{x}{t \cdot z - x}\right)}{x + 1}\]

Derivation

  1. Split input into 2 regimes
  2. if z < -3.3023912268343077e-102 or 1.9771970347394733e-38 < z

    1. Initial program 12.7

      \[\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\]
    2. Using strategy rm
    3. Applied div-sub12.7

      \[\leadsto \frac{x + \color{blue}{\left(\frac{y \cdot z}{t \cdot z - x} - \frac{x}{t \cdot z - x}\right)}}{x + 1}\]
    4. Applied associate-+r-12.7

      \[\leadsto \frac{\color{blue}{\left(x + \frac{y \cdot z}{t \cdot z - x}\right) - \frac{x}{t \cdot z - x}}}{x + 1}\]
    5. Applied div-sub12.7

      \[\leadsto \color{blue}{\frac{x + \frac{y \cdot z}{t \cdot z - x}}{x + 1} - \frac{\frac{x}{t \cdot z - x}}{x + 1}}\]
    6. Simplified4.9

      \[\leadsto \color{blue}{\frac{\mathsf{fma}\left(\frac{y}{\mathsf{fma}\left(z, t, -x\right)}, z, x\right)}{x + 1}} - \frac{\frac{x}{t \cdot z - x}}{x + 1}\]
    7. Using strategy rm
    8. Applied frac-2neg4.9

      \[\leadsto \frac{\mathsf{fma}\left(\frac{y}{\mathsf{fma}\left(z, t, -x\right)}, z, x\right)}{x + 1} - \frac{\color{blue}{\frac{-x}{-\left(t \cdot z - x\right)}}}{x + 1}\]
    9. Simplified4.9

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

    if -3.3023912268343077e-102 < z < 1.9771970347394733e-38

    1. Initial program 0.1

      \[\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\]
    2. Using strategy rm
    3. Applied clear-num0.1

      \[\leadsto \frac{x + \color{blue}{\frac{1}{\frac{t \cdot z - x}{y \cdot z - x}}}}{x + 1}\]
  3. Recombined 2 regimes into one program.
  4. Final simplification3.0

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -3.302391226834307651764656087267345680124 \cdot 10^{-102} \lor \neg \left(z \le 1.977197034739473314773841654677642237914 \cdot 10^{-38}\right):\\ \;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{\mathsf{fma}\left(z, t, -x\right)}, z, x\right)}{x + 1} - \frac{\frac{-x}{\mathsf{fma}\left(z, -t, x\right)}}{x + 1}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{1}{\frac{t \cdot z - x}{y \cdot z - x}}}{x + 1}\\ \end{array}\]

Reproduce

herbie shell --seed 2019350 +o rules:numerics
(FPCore (x y z t)
  :name "Diagrams.Trail:splitAtParam  from diagrams-lib-1.3.0.3, A"
  :precision binary64

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

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