\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -4.146017476034741648215512685179725914701 \cdot 10^{-38} \lor \neg \left(z \le 1.83962191097694431059745739898348814551 \cdot 10^{43}\right):\\
\;\;\;\;\frac{\sqrt[3]{x} \cdot \sqrt[3]{x}}{\frac{t - a \cdot z}{\sqrt[3]{x}}} - y \cdot \frac{z}{t - a \cdot z}\\
\mathbf{else}:\\
\;\;\;\;\frac{1}{\frac{t - a \cdot z}{x - y \cdot z}}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r428510 = x;
double r428511 = y;
double r428512 = z;
double r428513 = r428511 * r428512;
double r428514 = r428510 - r428513;
double r428515 = t;
double r428516 = a;
double r428517 = r428516 * r428512;
double r428518 = r428515 - r428517;
double r428519 = r428514 / r428518;
return r428519;
}
double f(double x, double y, double z, double t, double a) {
double r428520 = z;
double r428521 = -4.1460174760347416e-38;
bool r428522 = r428520 <= r428521;
double r428523 = 1.8396219109769443e+43;
bool r428524 = r428520 <= r428523;
double r428525 = !r428524;
bool r428526 = r428522 || r428525;
double r428527 = x;
double r428528 = cbrt(r428527);
double r428529 = r428528 * r428528;
double r428530 = t;
double r428531 = a;
double r428532 = r428531 * r428520;
double r428533 = r428530 - r428532;
double r428534 = r428533 / r428528;
double r428535 = r428529 / r428534;
double r428536 = y;
double r428537 = r428520 / r428533;
double r428538 = r428536 * r428537;
double r428539 = r428535 - r428538;
double r428540 = 1.0;
double r428541 = r428536 * r428520;
double r428542 = r428527 - r428541;
double r428543 = r428533 / r428542;
double r428544 = r428540 / r428543;
double r428545 = r428526 ? r428539 : r428544;
return r428545;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.2 |
|---|---|
| Target | 1.8 |
| Herbie | 7.0 |
if z < -4.1460174760347416e-38 or 1.8396219109769443e+43 < z Initial program 20.3
rmApplied div-sub20.3
Simplified13.1
rmApplied add-cube-cbrt13.4
Applied associate-/l*13.4
if -4.1460174760347416e-38 < z < 1.8396219109769443e+43Initial program 0.4
rmApplied clear-num0.9
Final simplification7.0
herbie shell --seed 2019325 +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))))