\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -7.433845130127019277921365656087791646311 \cdot 10^{-258}:\\
\;\;\;\;x \cdot \frac{1}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\
\mathbf{elif}\;z \le 6.637318488869211541788788475321548606226 \cdot 10^{-120}:\\
\;\;\;\;\frac{x}{t - a \cdot z} - \left(\frac{\sqrt[3]{y}}{\frac{\sqrt[3]{t - a \cdot z}}{\sqrt[3]{z}}} \cdot \frac{\sqrt[3]{y}}{\frac{\sqrt[3]{t - a \cdot z}}{\sqrt[3]{z}}}\right) \cdot \frac{\sqrt[3]{y}}{\frac{\sqrt[3]{t - a \cdot z}}{\sqrt[3]{z}}}\\
\mathbf{else}:\\
\;\;\;\;x \cdot \frac{1}{t - a \cdot z} - \frac{y}{\frac{t}{z} - a}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r124603677 = x;
double r124603678 = y;
double r124603679 = z;
double r124603680 = r124603678 * r124603679;
double r124603681 = r124603677 - r124603680;
double r124603682 = t;
double r124603683 = a;
double r124603684 = r124603683 * r124603679;
double r124603685 = r124603682 - r124603684;
double r124603686 = r124603681 / r124603685;
return r124603686;
}
double f(double x, double y, double z, double t, double a) {
double r124603687 = z;
double r124603688 = -7.433845130127019e-258;
bool r124603689 = r124603687 <= r124603688;
double r124603690 = x;
double r124603691 = 1.0;
double r124603692 = t;
double r124603693 = a;
double r124603694 = r124603693 * r124603687;
double r124603695 = r124603692 - r124603694;
double r124603696 = r124603691 / r124603695;
double r124603697 = r124603690 * r124603696;
double r124603698 = y;
double r124603699 = r124603692 / r124603687;
double r124603700 = r124603699 - r124603693;
double r124603701 = r124603698 / r124603700;
double r124603702 = r124603697 - r124603701;
double r124603703 = 6.637318488869212e-120;
bool r124603704 = r124603687 <= r124603703;
double r124603705 = r124603690 / r124603695;
double r124603706 = cbrt(r124603698);
double r124603707 = cbrt(r124603695);
double r124603708 = cbrt(r124603687);
double r124603709 = r124603707 / r124603708;
double r124603710 = r124603706 / r124603709;
double r124603711 = r124603710 * r124603710;
double r124603712 = r124603711 * r124603710;
double r124603713 = r124603705 - r124603712;
double r124603714 = r124603704 ? r124603713 : r124603702;
double r124603715 = r124603689 ? r124603702 : r124603714;
return r124603715;
}




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 | 2.4 |
if z < -7.433845130127019e-258 or 6.637318488869212e-120 < z Initial program 12.7
rmApplied div-sub12.7
rmApplied associate-/l*8.8
rmApplied div-sub8.8
Simplified2.9
rmApplied div-inv2.9
if -7.433845130127019e-258 < z < 6.637318488869212e-120Initial program 0.1
rmApplied div-sub0.1
rmApplied associate-/l*3.3
rmApplied add-cube-cbrt3.5
Applied add-cube-cbrt3.5
Applied times-frac3.5
Applied add-cube-cbrt3.5
Applied times-frac1.1
Simplified0.4
Final simplification2.4
herbie shell --seed 2019173
(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))))