\frac{x}{y - z \cdot t}\begin{array}{l}
\mathbf{if}\;z \cdot t = -\infty \lor \neg \left(z \cdot t \le 8.104691396034629497642141956511498930967 \cdot 10^{229}\right):\\
\;\;\;\;\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 r472656 = x;
double r472657 = y;
double r472658 = z;
double r472659 = t;
double r472660 = r472658 * r472659;
double r472661 = r472657 - r472660;
double r472662 = r472656 / r472661;
return r472662;
}
double f(double x, double y, double z, double t) {
double r472663 = z;
double r472664 = t;
double r472665 = r472663 * r472664;
double r472666 = -inf.0;
bool r472667 = r472665 <= r472666;
double r472668 = 8.10469139603463e+229;
bool r472669 = r472665 <= r472668;
double r472670 = !r472669;
bool r472671 = r472667 || r472670;
double r472672 = 1.0;
double r472673 = y;
double r472674 = x;
double r472675 = r472673 / r472674;
double r472676 = r472664 / r472674;
double r472677 = r472676 * r472663;
double r472678 = r472675 - r472677;
double r472679 = r472672 / r472678;
double r472680 = r472673 - r472665;
double r472681 = r472674 / r472680;
double r472682 = r472671 ? r472679 : r472681;
return r472682;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 2.9 |
|---|---|
| Target | 1.7 |
| Herbie | 0.8 |
if (* z t) < -inf.0 or 8.10469139603463e+229 < (* z t) Initial program 16.9
rmApplied clear-num17.2
Simplified17.2
rmApplied div-sub20.8
Simplified4.5
if -inf.0 < (* z t) < 8.10469139603463e+229Initial program 0.1
Final simplification0.8
herbie shell --seed 2019305
(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))))