Average Error: 2.8 → 1.9
Time: 12.4s
Precision: 64
\[\frac{x}{y - z \cdot t}\]
\[\begin{array}{l} \mathbf{if}\;z \cdot t \le 1.349598904952956934646438794357870456303 \cdot 10^{289}:\\ \;\;\;\;\frac{x}{y - z \cdot t}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{y}{x} - \frac{z}{\frac{x}{t}}}\\ \end{array}\]
\frac{x}{y - z \cdot t}
\begin{array}{l}
\mathbf{if}\;z \cdot t \le 1.349598904952956934646438794357870456303 \cdot 10^{289}:\\
\;\;\;\;\frac{x}{y - z \cdot t}\\

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

\end{array}
double f(double x, double y, double z, double t) {
        double r410133 = x;
        double r410134 = y;
        double r410135 = z;
        double r410136 = t;
        double r410137 = r410135 * r410136;
        double r410138 = r410134 - r410137;
        double r410139 = r410133 / r410138;
        return r410139;
}

double f(double x, double y, double z, double t) {
        double r410140 = z;
        double r410141 = t;
        double r410142 = r410140 * r410141;
        double r410143 = 1.349598904952957e+289;
        bool r410144 = r410142 <= r410143;
        double r410145 = x;
        double r410146 = y;
        double r410147 = r410146 - r410142;
        double r410148 = r410145 / r410147;
        double r410149 = 1.0;
        double r410150 = r410146 / r410145;
        double r410151 = r410145 / r410141;
        double r410152 = r410140 / r410151;
        double r410153 = r410150 - r410152;
        double r410154 = r410149 / r410153;
        double r410155 = r410144 ? r410148 : r410154;
        return r410155;
}

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

Original2.8
Target1.6
Herbie1.9
\[\begin{array}{l} \mathbf{if}\;x \lt -1.618195973607048970493874632750554853795 \cdot 10^{50}:\\ \;\;\;\;\frac{1}{\frac{y}{x} - \frac{z}{x} \cdot t}\\ \mathbf{elif}\;x \lt 2.137830643487644440407921345820165445823 \cdot 10^{131}:\\ \;\;\;\;\frac{x}{y - z \cdot t}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{y}{x} - \frac{z}{x} \cdot t}\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if (* z t) < 1.349598904952957e+289

    1. Initial program 1.6

      \[\frac{x}{y - z \cdot t}\]

    if 1.349598904952957e+289 < (* z t)

    1. Initial program 17.9

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

      \[\leadsto \color{blue}{\frac{1}{\frac{y - z \cdot t}{x}}}\]
    4. Simplified18.0

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

      \[\leadsto \frac{1}{\color{blue}{\frac{y}{x} - \frac{t \cdot z}{x}}}\]
    7. Simplified5.4

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \cdot t \le 1.349598904952956934646438794357870456303 \cdot 10^{289}:\\ \;\;\;\;\frac{x}{y - z \cdot t}\\ \mathbf{else}:\\ \;\;\;\;\frac{1}{\frac{y}{x} - \frac{z}{\frac{x}{t}}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019322 
(FPCore (x y z t)
  :name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, B"
  :precision binary64

  :herbie-target
  (if (< x -1.618195973607049e+50) (/ 1 (- (/ y x) (* (/ z x) t))) (if (< x 2.1378306434876444e+131) (/ x (- y (* z t))) (/ 1 (- (/ y x) (* (/ z x) t)))))

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