\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 7.560625940505470397372999874739945211814 \cdot 10^{-286}:\\
\;\;\;\;\frac{\mathsf{fma}\left(\frac{y}{t}, z, 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 4.353154786484829134540667406486672764698 \cdot 10^{250}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(\frac{y}{t}, z, x\right) \cdot \frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, a\right) + 1}\\
\end{array}double f(double x, double y, double z, double t, double a, double b) {
double r784284 = x;
double r784285 = y;
double r784286 = z;
double r784287 = r784285 * r784286;
double r784288 = t;
double r784289 = r784287 / r784288;
double r784290 = r784284 + r784289;
double r784291 = a;
double r784292 = 1.0;
double r784293 = r784291 + r784292;
double r784294 = b;
double r784295 = r784285 * r784294;
double r784296 = r784295 / r784288;
double r784297 = r784293 + r784296;
double r784298 = r784290 / r784297;
return r784298;
}
double f(double x, double y, double z, double t, double a, double b) {
double r784299 = x;
double r784300 = y;
double r784301 = z;
double r784302 = r784300 * r784301;
double r784303 = t;
double r784304 = r784302 / r784303;
double r784305 = r784299 + r784304;
double r784306 = a;
double r784307 = 1.0;
double r784308 = r784306 + r784307;
double r784309 = b;
double r784310 = r784300 * r784309;
double r784311 = r784310 / r784303;
double r784312 = r784308 + r784311;
double r784313 = r784305 / r784312;
double r784314 = 7.56062594050547e-286;
bool r784315 = r784313 <= r784314;
double r784316 = r784300 / r784303;
double r784317 = fma(r784316, r784301, r784299);
double r784318 = fma(r784316, r784309, r784306);
double r784319 = r784318 + r784307;
double r784320 = r784317 / r784319;
double r784321 = 4.353154786484829e+250;
bool r784322 = r784313 <= r784321;
double r784323 = 1.0;
double r784324 = r784323 / r784319;
double r784325 = r784317 * r784324;
double r784326 = r784322 ? r784313 : r784325;
double r784327 = r784315 ? r784320 : r784326;
return r784327;
}




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.1 |
|---|---|
| Target | 12.8 |
| Herbie | 13.1 |
if (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < 7.56062594050547e-286Initial program 13.8
Simplified11.1
if 7.56062594050547e-286 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) < 4.353154786484829e+250Initial program 0.5
if 4.353154786484829e+250 < (/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))) Initial program 57.3
Simplified47.4
rmApplied div-inv47.4
Final simplification13.1
herbie shell --seed 2019350 +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.036967103737246e-130) (/ z b) (* 1 (* (+ x (* (/ y t) z)) (/ 1 (+ (+ a 1) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1) (/ (* y b) t))))