\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -4.0472382802125399 \cdot 10^{-76} \lor \neg \left(z \le 2.2308287243209396 \cdot 10^{-8}\right):\\
\;\;\;\;\frac{x}{t - a \cdot z} - y \cdot \frac{z}{t - z \cdot a}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{\mathsf{fma}\left(a, -z, t\right)}{x - z \cdot y}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r828353 = x;
double r828354 = y;
double r828355 = z;
double r828356 = r828354 * r828355;
double r828357 = r828353 - r828356;
double r828358 = t;
double r828359 = a;
double r828360 = r828359 * r828355;
double r828361 = r828358 - r828360;
double r828362 = r828357 / r828361;
return r828362;
}
double f(double x, double y, double z, double t, double a) {
double r828363 = z;
double r828364 = -4.04723828021254e-76;
bool r828365 = r828363 <= r828364;
double r828366 = 2.2308287243209396e-08;
bool r828367 = r828363 <= r828366;
double r828368 = !r828367;
bool r828369 = r828365 || r828368;
double r828370 = x;
double r828371 = t;
double r828372 = a;
double r828373 = r828372 * r828363;
double r828374 = r828371 - r828373;
double r828375 = r828370 / r828374;
double r828376 = y;
double r828377 = r828363 * r828372;
double r828378 = r828371 - r828377;
double r828379 = r828363 / r828378;
double r828380 = r828376 * r828379;
double r828381 = r828375 - r828380;
double r828382 = 1.0;
double r828383 = -r828363;
double r828384 = fma(r828372, r828383, r828371);
double r828385 = r828363 * r828376;
double r828386 = r828370 - r828385;
double r828387 = r828384 / r828386;
double r828388 = r828382 / r828387;
double r828389 = r828369 ? r828381 : r828388;
return r828389;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.8 |
|---|---|
| Target | 1.8 |
| Herbie | 7.2 |
if z < -4.04723828021254e-76 or 2.2308287243209396e-08 < z Initial program 18.9
rmApplied div-sub18.9
Simplified12.3
if -4.04723828021254e-76 < z < 2.2308287243209396e-08Initial program 0.1
rmApplied clear-num0.5
Simplified0.5
Final simplification7.2
herbie shell --seed 2020043 +o rules:numerics
(FPCore (x y z t a)
:name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, A"
:precision binary64
:herbie-target
(if (< z -32113435955957344) (- (/ x (- t (* a z))) (/ y (- (/ t z) a))) (if (< z 3.5139522372978296e-86) (* (- x (* y z)) (/ 1 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))
(/ (- x (* y z)) (- t (* a z))))