\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -1226.1766839341781 \lor \neg \left(z \le 1.0351312592687676 \cdot 10^{85}\right):\\
\;\;\;\;x \cdot \frac{1}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{t - a \cdot z} - \frac{1}{\frac{t - a \cdot z}{y \cdot z}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r918283 = x;
double r918284 = y;
double r918285 = z;
double r918286 = r918284 * r918285;
double r918287 = r918283 - r918286;
double r918288 = t;
double r918289 = a;
double r918290 = r918289 * r918285;
double r918291 = r918288 - r918290;
double r918292 = r918287 / r918291;
return r918292;
}
double f(double x, double y, double z, double t, double a) {
double r918293 = z;
double r918294 = -1226.176683934178;
bool r918295 = r918293 <= r918294;
double r918296 = 1.0351312592687676e+85;
bool r918297 = r918293 <= r918296;
double r918298 = !r918297;
bool r918299 = r918295 || r918298;
double r918300 = x;
double r918301 = 1.0;
double r918302 = t;
double r918303 = a;
double r918304 = r918303 * r918293;
double r918305 = r918302 - r918304;
double r918306 = r918301 / r918305;
double r918307 = r918300 * r918306;
double r918308 = y;
double r918309 = r918302 / r918293;
double r918310 = r918309 - r918303;
double r918311 = r918308 / r918310;
double r918312 = r918307 - r918311;
double r918313 = r918300 / r918305;
double r918314 = r918308 * r918293;
double r918315 = r918305 / r918314;
double r918316 = r918301 / r918315;
double r918317 = r918313 - r918316;
double r918318 = r918299 ? r918312 : r918317;
return r918318;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.6 |
|---|---|
| Target | 1.8 |
| Herbie | 2.0 |
if z < -1226.176683934178 or 1.0351312592687676e+85 < z Initial program 23.3
rmApplied div-sub23.3
rmApplied associate-/l*14.5
rmApplied div-sub14.5
Simplified3.2
rmApplied div-inv3.2
if -1226.176683934178 < z < 1.0351312592687676e+85Initial program 0.9
rmApplied div-sub0.9
rmApplied clear-num1.0
Final simplification2.0
herbie shell --seed 2020034
(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))))