\frac{x}{y - z \cdot t}\begin{array}{l}
\mathbf{if}\;y - z \cdot t = -\infty:\\
\;\;\;\;\frac{1}{\frac{y}{x} - \frac{t}{x} \cdot z}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{y - z \cdot t}\\
\end{array}double f(double x, double y, double z, double t) {
double r470328 = x;
double r470329 = y;
double r470330 = z;
double r470331 = t;
double r470332 = r470330 * r470331;
double r470333 = r470329 - r470332;
double r470334 = r470328 / r470333;
return r470334;
}
double f(double x, double y, double z, double t) {
double r470335 = y;
double r470336 = z;
double r470337 = t;
double r470338 = r470336 * r470337;
double r470339 = r470335 - r470338;
double r470340 = -inf.0;
bool r470341 = r470339 <= r470340;
double r470342 = 1.0;
double r470343 = x;
double r470344 = r470335 / r470343;
double r470345 = r470337 / r470343;
double r470346 = r470345 * r470336;
double r470347 = r470344 - r470346;
double r470348 = r470342 / r470347;
double r470349 = r470343 / r470339;
double r470350 = r470341 ? r470348 : r470349;
return r470350;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.7 |
|---|---|
| Target | 1.6 |
| Herbie | 1.6 |
if (- y (* z t)) < -inf.0Initial program 21.0
rmApplied clear-num21.0
Simplified21.0
rmApplied div-sub23.8
Simplified3.7
if -inf.0 < (- y (* z t)) Initial program 1.4
Final simplification1.6
herbie shell --seed 2019209
(FPCore (x y z t)
:name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, B"
:precision binary64
:herbie-target
(if (< x -1.618195973607049e50) (/ 1 (- (/ y x) (* (/ z x) t))) (if (< x 2.13783064348764444e131) (/ x (- y (* z t))) (/ 1 (- (/ y x) (* (/ z x) t)))))
(/ x (- y (* z t))))