Average Error: 16.4 → 13.1
Time: 18.0s
Precision: 64
\[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
\[\begin{array}{l} \mathbf{if}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le -5.995296774722577 \cdot 10^{-195}:\\ \;\;\;\;\frac{\frac{1}{\frac{\frac{t}{y}}{z}} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)}\\ \mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le 8.5564551367445 \cdot 10^{-317}:\\ \;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1.0\right) + b \cdot \frac{y}{t}}\\ \mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le 5.849501499538423 \cdot 10^{+283}:\\ \;\;\;\;\frac{1}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \cdot \left(\frac{1}{\frac{t}{z \cdot y}} + x\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1.0\right) + b \cdot \frac{y}{t}}\\ \end{array}\]
\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}
\begin{array}{l}
\mathbf{if}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le -5.995296774722577 \cdot 10^{-195}:\\
\;\;\;\;\frac{\frac{1}{\frac{\frac{t}{y}}{z}} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)}\\

\mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le 8.5564551367445 \cdot 10^{-317}:\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1.0\right) + b \cdot \frac{y}{t}}\\

\mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le 5.849501499538423 \cdot 10^{+283}:\\
\;\;\;\;\frac{1}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \cdot \left(\frac{1}{\frac{t}{z \cdot y}} + x\right)\\

\mathbf{else}:\\
\;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1.0\right) + b \cdot \frac{y}{t}}\\

\end{array}
double f(double x, double y, double z, double t, double a, double b) {
        double r34242211 = x;
        double r34242212 = y;
        double r34242213 = z;
        double r34242214 = r34242212 * r34242213;
        double r34242215 = t;
        double r34242216 = r34242214 / r34242215;
        double r34242217 = r34242211 + r34242216;
        double r34242218 = a;
        double r34242219 = 1.0;
        double r34242220 = r34242218 + r34242219;
        double r34242221 = b;
        double r34242222 = r34242212 * r34242221;
        double r34242223 = r34242222 / r34242215;
        double r34242224 = r34242220 + r34242223;
        double r34242225 = r34242217 / r34242224;
        return r34242225;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r34242226 = z;
        double r34242227 = y;
        double r34242228 = r34242226 * r34242227;
        double r34242229 = t;
        double r34242230 = r34242228 / r34242229;
        double r34242231 = x;
        double r34242232 = r34242230 + r34242231;
        double r34242233 = b;
        double r34242234 = r34242233 * r34242227;
        double r34242235 = r34242234 / r34242229;
        double r34242236 = a;
        double r34242237 = 1.0;
        double r34242238 = r34242236 + r34242237;
        double r34242239 = r34242235 + r34242238;
        double r34242240 = r34242232 / r34242239;
        double r34242241 = -5.995296774722577e-195;
        bool r34242242 = r34242240 <= r34242241;
        double r34242243 = 1.0;
        double r34242244 = r34242229 / r34242227;
        double r34242245 = r34242244 / r34242226;
        double r34242246 = r34242243 / r34242245;
        double r34242247 = r34242246 + r34242231;
        double r34242248 = r34242247 / r34242239;
        double r34242249 = 8.5564551367445e-317;
        bool r34242250 = r34242240 <= r34242249;
        double r34242251 = r34242229 / r34242226;
        double r34242252 = r34242227 / r34242251;
        double r34242253 = r34242231 + r34242252;
        double r34242254 = r34242227 / r34242229;
        double r34242255 = r34242233 * r34242254;
        double r34242256 = r34242238 + r34242255;
        double r34242257 = r34242253 / r34242256;
        double r34242258 = 5.849501499538423e+283;
        bool r34242259 = r34242240 <= r34242258;
        double r34242260 = r34242243 / r34242239;
        double r34242261 = r34242229 / r34242228;
        double r34242262 = r34242243 / r34242261;
        double r34242263 = r34242262 + r34242231;
        double r34242264 = r34242260 * r34242263;
        double r34242265 = r34242259 ? r34242264 : r34242257;
        double r34242266 = r34242250 ? r34242257 : r34242265;
        double r34242267 = r34242242 ? r34242248 : r34242266;
        return r34242267;
}

Error

Bits error versus x

Bits error versus y

Bits error versus z

Bits error versus t

Bits error versus a

Bits error versus b

Try it out

Your Program's Arguments

Results

Enter valid numbers for all inputs

Target

Original16.4
Target13.3
Herbie13.1
\[\begin{array}{l} \mathbf{if}\;t \lt -1.3659085366310088 \cdot 10^{-271}:\\ \;\;\;\;1 \cdot \left(\left(x + \frac{y}{t} \cdot z\right) \cdot \frac{1}{\left(a + 1.0\right) + \frac{y}{t} \cdot b}\right)\\ \mathbf{elif}\;t \lt 3.036967103737246 \cdot 10^{-130}:\\ \;\;\;\;\frac{z}{b}\\ \mathbf{else}:\\ \;\;\;\;1 \cdot \left(\left(x + \frac{y}{t} \cdot z\right) \cdot \frac{1}{\left(a + 1.0\right) + \frac{y}{t} \cdot b}\right)\\ \end{array}\]

Derivation

  1. Split input into 3 regimes
  2. if (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < -5.995296774722577e-195

    1. Initial program 8.1

      \[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
    2. Using strategy rm
    3. Applied clear-num8.1

      \[\leadsto \frac{x + \color{blue}{\frac{1}{\frac{t}{y \cdot z}}}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
    4. Using strategy rm
    5. Applied associate-/r*7.1

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

    if -5.995296774722577e-195 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < 8.5564551367445e-317 or 5.849501499538423e+283 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t)))

    1. Initial program 38.0

      \[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
    2. Using strategy rm
    3. Applied clear-num38.0

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

      \[\leadsto \color{blue}{\left(x + \frac{1}{\frac{t}{y \cdot z}}\right) \cdot \frac{1}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}}\]
    6. Using strategy rm
    7. Applied *-un-lft-identity38.0

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

      \[\leadsto \color{blue}{1 \cdot \left(\left(x + \frac{1}{\frac{t}{y \cdot z}}\right) \cdot \frac{1}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\right)}\]
    9. Simplified33.4

      \[\leadsto 1 \cdot \color{blue}{\frac{x + \frac{y \cdot z}{t}}{\left(1.0 + a\right) + \frac{y}{t} \cdot b}}\]
    10. Using strategy rm
    11. Applied *-un-lft-identity33.4

      \[\leadsto 1 \cdot \frac{x + \frac{y \cdot z}{t}}{\color{blue}{1 \cdot \left(\left(1.0 + a\right) + \frac{y}{t} \cdot b\right)}}\]
    12. Applied associate-/r*33.4

      \[\leadsto 1 \cdot \color{blue}{\frac{\frac{x + \frac{y \cdot z}{t}}{1}}{\left(1.0 + a\right) + \frac{y}{t} \cdot b}}\]
    13. Simplified29.6

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

    if 8.5564551367445e-317 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < 5.849501499538423e+283

    1. Initial program 0.6

      \[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
    2. Using strategy rm
    3. Applied clear-num0.6

      \[\leadsto \frac{x + \color{blue}{\frac{1}{\frac{t}{y \cdot z}}}}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}\]
    4. Using strategy rm
    5. Applied div-inv0.7

      \[\leadsto \color{blue}{\left(x + \frac{1}{\frac{t}{y \cdot z}}\right) \cdot \frac{1}{\left(a + 1.0\right) + \frac{y \cdot b}{t}}}\]
  3. Recombined 3 regimes into one program.
  4. Final simplification13.1

    \[\leadsto \begin{array}{l} \mathbf{if}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le -5.995296774722577 \cdot 10^{-195}:\\ \;\;\;\;\frac{\frac{1}{\frac{\frac{t}{y}}{z}} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)}\\ \mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le 8.5564551367445 \cdot 10^{-317}:\\ \;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1.0\right) + b \cdot \frac{y}{t}}\\ \mathbf{elif}\;\frac{\frac{z \cdot y}{t} + x}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \le 5.849501499538423 \cdot 10^{+283}:\\ \;\;\;\;\frac{1}{\frac{b \cdot y}{t} + \left(a + 1.0\right)} \cdot \left(\frac{1}{\frac{t}{z \cdot y}} + x\right)\\ \mathbf{else}:\\ \;\;\;\;\frac{x + \frac{y}{\frac{t}{z}}}{\left(a + 1.0\right) + b \cdot \frac{y}{t}}\\ \end{array}\]

Reproduce

herbie shell --seed 2019158 
(FPCore (x y z t a b)
  :name "Diagrams.Solve.Tridiagonal:solveCyclicTriDiagonal from diagrams-solve-0.1, B"

  :herbie-target
  (if (< t -1.3659085366310088e-271) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1.0) (* (/ y t) b)))))))

  (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))))