\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -1.247902517758596795481298690172105506598 \cdot 10^{-85} \lor \neg \left(z \le 1.035834224912832515763660978791449451819 \cdot 10^{-4}\right):\\
\;\;\;\;\frac{1}{\frac{t - a \cdot z}{x}} - \frac{y}{\frac{t}{z} - a}\\
\mathbf{else}:\\
\;\;\;\;\left(x - y \cdot z\right) \cdot \frac{1}{t - a \cdot z}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r388264 = x;
double r388265 = y;
double r388266 = z;
double r388267 = r388265 * r388266;
double r388268 = r388264 - r388267;
double r388269 = t;
double r388270 = a;
double r388271 = r388270 * r388266;
double r388272 = r388269 - r388271;
double r388273 = r388268 / r388272;
return r388273;
}
double f(double x, double y, double z, double t, double a) {
double r388274 = z;
double r388275 = -1.2479025177585968e-85;
bool r388276 = r388274 <= r388275;
double r388277 = 0.00010358342249128325;
bool r388278 = r388274 <= r388277;
double r388279 = !r388278;
bool r388280 = r388276 || r388279;
double r388281 = 1.0;
double r388282 = t;
double r388283 = a;
double r388284 = r388283 * r388274;
double r388285 = r388282 - r388284;
double r388286 = x;
double r388287 = r388285 / r388286;
double r388288 = r388281 / r388287;
double r388289 = y;
double r388290 = r388282 / r388274;
double r388291 = r388290 - r388283;
double r388292 = r388289 / r388291;
double r388293 = r388288 - r388292;
double r388294 = r388289 * r388274;
double r388295 = r388286 - r388294;
double r388296 = r388281 / r388285;
double r388297 = r388295 * r388296;
double r388298 = r388280 ? r388293 : r388297;
return r388298;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.7 |
|---|---|
| Target | 1.6 |
| Herbie | 1.6 |
if z < -1.2479025177585968e-85 or 0.00010358342249128325 < z Initial program 18.6
rmApplied div-sub18.6
Simplified11.5
rmApplied pow111.5
Applied pow111.5
Applied pow-prod-down11.5
Simplified2.5
rmApplied clear-num2.6
if -1.2479025177585968e-85 < z < 0.00010358342249128325Initial program 0.1
rmApplied div-inv0.3
Final simplification1.6
herbie shell --seed 2019322 +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))))