\frac{x + \frac{y \cdot z}{t}}{\left(a + 1\right) + \frac{y \cdot b}{t}}\begin{array}{l}
\mathbf{if}\;t \le 3.614569668922552776109548998076496091155 \cdot 10^{-31}:\\
\;\;\;\;\frac{x + \frac{y \cdot z}{t}}{\left(1 + a\right) + \frac{1}{\frac{t}{y \cdot b}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\mathsf{fma}\left(\frac{y}{t}, b, 1 + a\right)} \cdot \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 r36228258 = x;
double r36228259 = y;
double r36228260 = z;
double r36228261 = r36228259 * r36228260;
double r36228262 = t;
double r36228263 = r36228261 / r36228262;
double r36228264 = r36228258 + r36228263;
double r36228265 = a;
double r36228266 = 1.0;
double r36228267 = r36228265 + r36228266;
double r36228268 = b;
double r36228269 = r36228259 * r36228268;
double r36228270 = r36228269 / r36228262;
double r36228271 = r36228267 + r36228270;
double r36228272 = r36228264 / r36228271;
return r36228272;
}
double f(double x, double y, double z, double t, double a, double b) {
double r36228273 = t;
double r36228274 = 3.6145696689225528e-31;
bool r36228275 = r36228273 <= r36228274;
double r36228276 = x;
double r36228277 = y;
double r36228278 = z;
double r36228279 = r36228277 * r36228278;
double r36228280 = r36228279 / r36228273;
double r36228281 = r36228276 + r36228280;
double r36228282 = 1.0;
double r36228283 = a;
double r36228284 = r36228282 + r36228283;
double r36228285 = 1.0;
double r36228286 = b;
double r36228287 = r36228277 * r36228286;
double r36228288 = r36228273 / r36228287;
double r36228289 = r36228285 / r36228288;
double r36228290 = r36228284 + r36228289;
double r36228291 = r36228281 / r36228290;
double r36228292 = r36228277 / r36228273;
double r36228293 = fma(r36228292, r36228286, r36228284);
double r36228294 = r36228285 / r36228293;
double r36228295 = fma(r36228292, r36228278, r36228276);
double r36228296 = r36228294 * r36228295;
double r36228297 = r36228275 ? r36228291 : r36228296;
return r36228297;
}




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 | 17.0 |
|---|---|
| Target | 13.5 |
| Herbie | 15.0 |
if t < 3.6145696689225528e-31Initial program 19.1
rmApplied clear-num19.1
if 3.6145696689225528e-31 < t Initial program 11.7
Simplified4.4
rmApplied div-inv4.5
Final simplification15.0
herbie shell --seed 2019172 +o rules:numerics
(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.0 (* (+ x (* (/ y t) z)) (/ 1.0 (+ (+ a 1.0) (* (/ y t) b))))) (if (< t 3.036967103737246e-130) (/ z b) (* 1.0 (* (+ x (* (/ y t) z)) (/ 1.0 (+ (+ a 1.0) (* (/ y t) b)))))))
(/ (+ x (/ (* y z) t)) (+ (+ a 1.0) (/ (* y b) t))))