Average Error: 16.0 → 16.0
Time: 4.1s
Precision: 64
\[\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\]
\[\frac{x + \left(y \cdot z\right) \cdot \frac{1}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\]
\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}
\frac{x + \left(y \cdot z\right) \cdot \frac{1}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}
double f(double x, double y, double z, double t, double a, double b) {
        double r700417 = x;
        double r700418 = y;
        double r700419 = z;
        double r700420 = r700418 * r700419;
        double r700421 = t;
        double r700422 = r700420 / r700421;
        double r700423 = r700417 + r700422;
        double r700424 = a;
        double r700425 = 1.0;
        double r700426 = r700424 + r700425;
        double r700427 = b;
        double r700428 = r700418 * r700427;
        double r700429 = r700428 / r700421;
        double r700430 = r700426 + r700429;
        double r700431 = r700423 / r700430;
        return r700431;
}

double f(double x, double y, double z, double t, double a, double b) {
        double r700432 = x;
        double r700433 = y;
        double r700434 = z;
        double r700435 = r700433 * r700434;
        double r700436 = 1.0;
        double r700437 = t;
        double r700438 = r700436 / r700437;
        double r700439 = r700435 * r700438;
        double r700440 = r700432 + r700439;
        double r700441 = a;
        double r700442 = 1.0;
        double r700443 = r700441 + r700442;
        double r700444 = b;
        double r700445 = r700433 * r700444;
        double r700446 = r700445 / r700437;
        double r700447 = r700443 + r700446;
        double r700448 = r700440 / r700447;
        return r700448;
}

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.0
Target13.3
Herbie16.0
\[\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\right) + \frac{y}{t} \cdot b}\right)\\ \mathbf{elif}\;t \lt 3.0369671037372459 \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\right) + \frac{y}{t} \cdot b}\right)\\ \end{array}\]

Derivation

  1. Initial program 16.0

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

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

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

Reproduce

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

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

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