\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}} \le -3.634799063555624674511406567758455140321 \cdot 10^{180}:\\
\;\;\;\;\frac{1}{\left(\mathsf{fma}\left(\frac{y}{t}, b, a\right) + 1\right) \cdot \frac{1}{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}}\\
\mathbf{elif}\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}} \le -5.541990141838404510339109556572102988349 \cdot 10^{-225}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\mathbf{elif}\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}} \le 1.487602339458545407496150121045775053955 \cdot 10^{-281}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{z}{t}, y, x\right)}{\mathsf{fma}\left(\frac{y}{t}, b, a\right) + 1}\\
\mathbf{elif}\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}} \le 9.209141904289515274314784418784539649107 \cdot 10^{245}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\left(\mathsf{fma}\left(\frac{y}{t}, b, a\right) + 1\right) \cdot \frac{1}{\mathsf{fma}\left(\frac{y}{t}, z, x\right)}}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r661513 = x;
double r661514 = y;
double r661515 = z;
double r661516 = r661514 * r661515;
double r661517 = t;
double r661518 = r661516 / r661517;
double r661519 = r661513 + r661518;
double r661520 = a;
double r661521 = 1.0;
double r661522 = r661520 + r661521;
double r661523 = b;
double r661524 = r661514 * r661523;
double r661525 = r661524 / r661517;
double r661526 = r661522 + r661525;
double r661527 = r661519 / r661526;
return r661527;
}
double f(double x, double y, double z, double t, double a, double b) {
double r661528 = x;
double r661529 = y;
double r661530 = z;
double r661531 = r661529 * r661530;
double r661532 = t;
double r661533 = r661531 / r661532;
double r661534 = r661528 + r661533;
double r661535 = a;
double r661536 = 1.0;
double r661537 = r661535 + r661536;
double r661538 = b;
double r661539 = r661529 * r661538;
double r661540 = r661539 / r661532;
double r661541 = r661537 + r661540;
double r661542 = r661534 / r661541;
double r661543 = -3.6347990635556247e+180;
bool r661544 = r661542 <= r661543;
double r661545 = 1.0;
double r661546 = r661529 / r661532;
double r661547 = fma(r661546, r661538, r661535);
double r661548 = r661547 + r661536;
double r661549 = fma(r661546, r661530, r661528);
double r661550 = r661545 / r661549;
double r661551 = r661548 * r661550;
double r661552 = r661545 / r661551;
double r661553 = -5.541990141838405e-225;
bool r661554 = r661542 <= r661553;
double r661555 = 1.4876023394585454e-281;
bool r661556 = r661542 <= r661555;
double r661557 = r661530 / r661532;
double r661558 = fma(r661557, r661529, r661528);
double r661559 = r661558 / r661548;
double r661560 = 9.209141904289515e+245;
bool r661561 = r661542 <= r661560;
double r661562 = r661561 ? r661542 : r661552;
double r661563 = r661556 ? r661559 : r661562;
double r661564 = r661554 ? r661542 : r661563;
double r661565 = r661544 ? r661552 : r661564;
return r661565;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a




Bits error versus b
| Original | 16.3 |
|---|---|
| Target | 13.0 |
| Herbie | 12.2 |
if (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < -3.6347990635556247e+180 or 9.209141904289515e+245 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) Initial program 47.0
Simplified36.4
rmApplied clear-num36.5
rmApplied div-inv36.5
if -3.6347990635556247e+180 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < -5.541990141838405e-225 or 1.4876023394585454e-281 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < 9.209141904289515e+245Initial program 0.4
if -5.541990141838405e-225 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < 1.4876023394585454e-281Initial program 22.9
Simplified19.6
rmApplied clear-num20.8
rmApplied *-un-lft-identity20.8
Applied *-un-lft-identity20.8
Applied times-frac20.8
Applied add-cube-cbrt20.8
Applied times-frac20.8
Simplified20.8
Simplified15.3
Final simplification12.2
herbie shell --seed 2019305 +o rules:numerics
(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.0369671037372459e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1) (/ (* y b) t))))