\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -3.551849925243378557590267856505205658033 \cdot 10^{63} \lor \neg \left(z \le 7.78354143719955323570028935715887199383 \cdot 10^{117}\right):\\
\;\;\;\;\frac{x}{\sqrt[3]{t - a \cdot z}} \cdot \frac{1}{\sqrt[3]{t - a \cdot z} \cdot \sqrt[3]{t - a \cdot z}} - \frac{y}{\frac{t}{z} - a}\\
\mathbf{else}:\\
\;\;\;\;\frac{x}{t - a \cdot z} - \left(z \cdot y\right) \cdot \frac{1}{t - a \cdot z}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r656190 = x;
double r656191 = y;
double r656192 = z;
double r656193 = r656191 * r656192;
double r656194 = r656190 - r656193;
double r656195 = t;
double r656196 = a;
double r656197 = r656196 * r656192;
double r656198 = r656195 - r656197;
double r656199 = r656194 / r656198;
return r656199;
}
double f(double x, double y, double z, double t, double a) {
double r656200 = z;
double r656201 = -3.5518499252433786e+63;
bool r656202 = r656200 <= r656201;
double r656203 = 7.783541437199553e+117;
bool r656204 = r656200 <= r656203;
double r656205 = !r656204;
bool r656206 = r656202 || r656205;
double r656207 = x;
double r656208 = t;
double r656209 = a;
double r656210 = r656209 * r656200;
double r656211 = r656208 - r656210;
double r656212 = cbrt(r656211);
double r656213 = r656207 / r656212;
double r656214 = 1.0;
double r656215 = r656212 * r656212;
double r656216 = r656214 / r656215;
double r656217 = r656213 * r656216;
double r656218 = y;
double r656219 = r656208 / r656200;
double r656220 = r656219 - r656209;
double r656221 = r656218 / r656220;
double r656222 = r656217 - r656221;
double r656223 = r656207 / r656211;
double r656224 = r656200 * r656218;
double r656225 = r656214 / r656211;
double r656226 = r656224 * r656225;
double r656227 = r656223 - r656226;
double r656228 = r656206 ? r656222 : r656227;
return r656228;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.3 |
|---|---|
| Target | 1.6 |
| Herbie | 2.5 |
if z < -3.5518499252433786e+63 or 7.783541437199553e+117 < z Initial program 26.3
Simplified26.3
rmApplied div-sub26.3
Simplified15.7
rmApplied clear-num15.8
Simplified3.4
rmApplied *-un-lft-identity3.4
Applied *-un-lft-identity3.4
Applied times-frac3.4
Applied *-un-lft-identity3.4
Applied *-un-lft-identity3.4
Applied times-frac3.4
Applied distribute-lft-out--3.4
Applied add-cube-cbrt3.4
Applied times-frac3.4
Applied associate-*l*3.4
Simplified3.3
rmApplied add-cube-cbrt3.5
Applied *-un-lft-identity3.5
Applied times-frac3.5
if -3.5518499252433786e+63 < z < 7.783541437199553e+117Initial program 1.9
Simplified1.9
rmApplied div-sub1.9
Simplified3.0
rmApplied clear-num3.2
Simplified2.7
rmApplied frac-sub3.2
Applied associate-/r/3.0
Applied associate-*l*2.0
Simplified2.0
Final simplification2.5
herbie shell --seed 2019179
(FPCore (x y z t a)
:name "Diagrams.Solve.Tridiagonal:solveTriDiagonal from diagrams-solve-0.1, A"
:herbie-target
(if (< z -32113435955957344.0) (- (/ x (- t (* a z))) (/ y (- (/ t z) a))) (if (< z 3.5139522372978296e-86) (* (- x (* y z)) (/ 1.0 (- t (* a z)))) (- (/ x (- t (* a z))) (/ y (- (/ t z) a)))))
(/ (- x (* y z)) (- t (* a z))))