Average Error: 10.1 → 1.9
Time: 8.4s
Precision: 64
\[\frac{x - y \cdot z}{t - a \cdot z}\]
\[\begin{array}{l} \mathbf{if}\;z \le -2.641509782526601298279532661534483525308 \cdot 10^{-139} \lor \neg \left(z \le 2.974028994343512209490359488108470942818 \cdot 10^{-131}\right):\\ \;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{t - a \cdot z} - \frac{1}{t - a \cdot z} \cdot \left(y \cdot z\right)\\ \end{array}\]
\frac{x - y \cdot z}{t - a \cdot z}
\begin{array}{l}
\mathbf{if}\;z \le -2.641509782526601298279532661534483525308 \cdot 10^{-139} \lor \neg \left(z \le 2.974028994343512209490359488108470942818 \cdot 10^{-131}\right):\\
\;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\

\mathbf{else}:\\
\;\;\;\;\frac{x}{t - a \cdot z} - \frac{1}{t - a \cdot z} \cdot \left(y \cdot z\right)\\

\end{array}
double f(double x, double y, double z, double t, double a) {
        double r476032 = x;
        double r476033 = y;
        double r476034 = z;
        double r476035 = r476033 * r476034;
        double r476036 = r476032 - r476035;
        double r476037 = t;
        double r476038 = a;
        double r476039 = r476038 * r476034;
        double r476040 = r476037 - r476039;
        double r476041 = r476036 / r476040;
        return r476041;
}

double f(double x, double y, double z, double t, double a) {
        double r476042 = z;
        double r476043 = -2.6415097825266013e-139;
        bool r476044 = r476042 <= r476043;
        double r476045 = 2.974028994343512e-131;
        bool r476046 = r476042 <= r476045;
        double r476047 = !r476046;
        bool r476048 = r476044 || r476047;
        double r476049 = x;
        double r476050 = t;
        double r476051 = a;
        double r476052 = r476051 * r476042;
        double r476053 = r476050 - r476052;
        double r476054 = r476049 / r476053;
        double r476055 = y;
        double r476056 = r476050 / r476042;
        double r476057 = r476056 - r476051;
        double r476058 = r476055 / r476057;
        double r476059 = r476054 - r476058;
        double r476060 = 1.0;
        double r476061 = r476060 / r476053;
        double r476062 = r476055 * r476042;
        double r476063 = r476061 * r476062;
        double r476064 = r476054 - r476063;
        double r476065 = r476048 ? r476059 : r476064;
        return r476065;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original10.1
Target1.6
Herbie1.9
\[\begin{array}{l} \mathbf{if}\;z \lt -32113435955957344:\\ \;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\ \mathbf{elif}\;z \lt 3.51395223729782958298856956410892592016 \cdot 10^{-86}:\\ \;\;\;\;\left(x - y \cdot z\right) \cdot \frac{1}{t - a \cdot z}\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\ \end{array}\]

Derivation

  1. Split input into 2 regimes
  2. if z < -2.6415097825266013e-139 or 2.974028994343512e-131 < z

    1. Initial program 14.0

      \[\frac{x - y \cdot z}{t - a \cdot z}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity14.0

      \[\leadsto \frac{x - y \cdot z}{\color{blue}{1 \cdot \left(t - a \cdot z\right)}}\]
    4. Applied *-un-lft-identity14.0

      \[\leadsto \frac{\color{blue}{1 \cdot \left(x - y \cdot z\right)}}{1 \cdot \left(t - a \cdot z\right)}\]
    5. Applied times-frac14.0

      \[\leadsto \color{blue}{\frac{1}{1} \cdot \frac{x - y \cdot z}{t - a \cdot z}}\]
    6. Simplified14.0

      \[\leadsto \color{blue}{1} \cdot \frac{x - y \cdot z}{t - a \cdot z}\]
    7. Using strategy rm
    8. Applied div-sub14.0

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

      \[\leadsto 1 \cdot \left(\frac{x}{t - a \cdot z} - \color{blue}{\frac{y}{\frac{t - a \cdot z}{z}}}\right)\]
    11. Using strategy rm
    12. Applied div-sub9.5

      \[\leadsto 1 \cdot \left(\frac{x}{t - a \cdot z} - \frac{y}{\color{blue}{\frac{t}{z} - \frac{a \cdot z}{z}}}\right)\]
    13. Simplified2.6

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

    if -2.6415097825266013e-139 < z < 2.974028994343512e-131

    1. Initial program 0.1

      \[\frac{x - y \cdot z}{t - a \cdot z}\]
    2. Using strategy rm
    3. Applied *-un-lft-identity0.1

      \[\leadsto \frac{x - y \cdot z}{\color{blue}{1 \cdot \left(t - a \cdot z\right)}}\]
    4. Applied *-un-lft-identity0.1

      \[\leadsto \frac{\color{blue}{1 \cdot \left(x - y \cdot z\right)}}{1 \cdot \left(t - a \cdot z\right)}\]
    5. Applied times-frac0.1

      \[\leadsto \color{blue}{\frac{1}{1} \cdot \frac{x - y \cdot z}{t - a \cdot z}}\]
    6. Simplified0.1

      \[\leadsto \color{blue}{1} \cdot \frac{x - y \cdot z}{t - a \cdot z}\]
    7. Using strategy rm
    8. Applied div-sub0.1

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

      \[\leadsto 1 \cdot \left(\frac{x}{t - a \cdot z} - \color{blue}{\frac{y}{\frac{t - a \cdot z}{z}}}\right)\]
    11. Using strategy rm
    12. Applied div-inv3.9

      \[\leadsto 1 \cdot \left(\frac{x}{t - a \cdot z} - \frac{y}{\color{blue}{\left(t - a \cdot z\right) \cdot \frac{1}{z}}}\right)\]
    13. Applied *-un-lft-identity3.9

      \[\leadsto 1 \cdot \left(\frac{x}{t - a \cdot z} - \frac{\color{blue}{1 \cdot y}}{\left(t - a \cdot z\right) \cdot \frac{1}{z}}\right)\]
    14. Applied times-frac0.2

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

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

    \[\leadsto \begin{array}{l} \mathbf{if}\;z \le -2.641509782526601298279532661534483525308 \cdot 10^{-139} \lor \neg \left(z \le 2.974028994343512209490359488108470942818 \cdot 10^{-131}\right):\\ \;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\ \mathbf{else}:\\ \;\;\;\;\frac{x}{t - a \cdot z} - \frac{1}{t - a \cdot z} \cdot \left(y \cdot z\right)\\ \end{array}\]

Reproduce

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

  :herbie-target
  (if (< z -32113435955957344) (- (/ x (- t (* a z))) (/ y (- (/ t z) a))) (if (< z 3.51395223729782958e-86) (* (- x (* y z)) (/ 1 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))

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