Average Error: 7.0 → 3.4
Time: 13.9s
Precision: 64
\[\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\]
\[\begin{array}{l} \mathbf{if}\;z \le -3.832743991663159011901320277588321287743 \cdot 10^{163} \lor \neg \left(z \le 2.591866107892754560678508093750567912678 \cdot 10^{61}\right):\\ \;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{1}{\frac{t \cdot z}{y \cdot z - x} - \frac{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.832743991663159011901320277588321287743 \cdot 10^{163} \lor \neg \left(z \le 2.591866107892754560678508093750567912678 \cdot 10^{61}\right):\\
\;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\

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

\end{array}
double f(double x, double y, double z, double t) {
        double r420057 = x;
        double r420058 = y;
        double r420059 = z;
        double r420060 = r420058 * r420059;
        double r420061 = r420060 - r420057;
        double r420062 = t;
        double r420063 = r420062 * r420059;
        double r420064 = r420063 - r420057;
        double r420065 = r420061 / r420064;
        double r420066 = r420057 + r420065;
        double r420067 = 1.0;
        double r420068 = r420057 + r420067;
        double r420069 = r420066 / r420068;
        return r420069;
}

double f(double x, double y, double z, double t) {
        double r420070 = z;
        double r420071 = -3.832743991663159e+163;
        bool r420072 = r420070 <= r420071;
        double r420073 = 2.5918661078927546e+61;
        bool r420074 = r420070 <= r420073;
        double r420075 = !r420074;
        bool r420076 = r420072 || r420075;
        double r420077 = x;
        double r420078 = y;
        double r420079 = t;
        double r420080 = r420078 / r420079;
        double r420081 = r420077 + r420080;
        double r420082 = 1.0;
        double r420083 = r420077 + r420082;
        double r420084 = r420081 / r420083;
        double r420085 = 1.0;
        double r420086 = r420079 * r420070;
        double r420087 = r420078 * r420070;
        double r420088 = r420087 - r420077;
        double r420089 = r420086 / r420088;
        double r420090 = r420077 / r420088;
        double r420091 = r420089 - r420090;
        double r420092 = r420085 / r420091;
        double r420093 = r420077 + r420092;
        double r420094 = r420093 / r420083;
        double r420095 = r420076 ? r420084 : r420094;
        return r420095;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original7.0
Target0.3
Herbie3.4
\[\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.832743991663159e+163 or 2.5918661078927546e+61 < z

    1. Initial program 18.9

      \[\frac{x + \frac{y \cdot z - x}{t \cdot z - x}}{x + 1}\]
    2. Taylor expanded around inf 7.5

      \[\leadsto \frac{x + \color{blue}{\frac{y}{t}}}{x + 1}\]

    if -3.832743991663159e+163 < z < 2.5918661078927546e+61

    1. Initial program 1.6

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

      \[\leadsto \frac{x + \color{blue}{\frac{1}{\frac{t \cdot z - x}{y \cdot z - x}}}}{x + 1}\]
    4. Using strategy rm
    5. Applied div-sub1.6

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -3.832743991663159011901320277588321287743 \cdot 10^{163} \lor \neg \left(z \le 2.591866107892754560678508093750567912678 \cdot 10^{61}\right):\\ \;\;\;\;\frac{x + \frac{y}{t}}{x + 1}\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{1}{\frac{t \cdot z}{y \cdot z - x} - \frac{x}{y \cdot z - x}}}{x + 1}\\ \end{array}\]

Reproduce

herbie shell --seed 2019294 
(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)))