\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;z \le -6.190032178478921 \cdot 10^{-100}:\\
\;\;\;\;\frac{x}{t - a \cdot z} - \frac{y}{\frac{t - a \cdot z}{z}}\\
\mathbf{else}:\\
\;\;\;\;\mathsf{fma}\left(1, \frac{\sqrt[3]{x}}{\sqrt[3]{t - a \cdot z}} \cdot \left(\frac{\sqrt[3]{x}}{\sqrt[3]{t - a \cdot z}} \cdot \frac{\sqrt[3]{x}}{\sqrt[3]{t - a \cdot z}}\right), \frac{-1}{t - a \cdot z} \cdot \left(y \cdot z\right)\right) + \mathsf{fma}\left(\frac{-1}{t - a \cdot z}, y \cdot z, \frac{1}{t - a \cdot z} \cdot \left(y \cdot z\right)\right)\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r25439629 = x;
double r25439630 = y;
double r25439631 = z;
double r25439632 = r25439630 * r25439631;
double r25439633 = r25439629 - r25439632;
double r25439634 = t;
double r25439635 = a;
double r25439636 = r25439635 * r25439631;
double r25439637 = r25439634 - r25439636;
double r25439638 = r25439633 / r25439637;
return r25439638;
}
double f(double x, double y, double z, double t, double a) {
double r25439639 = z;
double r25439640 = -6.190032178478921e-100;
bool r25439641 = r25439639 <= r25439640;
double r25439642 = x;
double r25439643 = t;
double r25439644 = a;
double r25439645 = r25439644 * r25439639;
double r25439646 = r25439643 - r25439645;
double r25439647 = r25439642 / r25439646;
double r25439648 = y;
double r25439649 = r25439646 / r25439639;
double r25439650 = r25439648 / r25439649;
double r25439651 = r25439647 - r25439650;
double r25439652 = 1.0;
double r25439653 = cbrt(r25439642);
double r25439654 = cbrt(r25439646);
double r25439655 = r25439653 / r25439654;
double r25439656 = r25439655 * r25439655;
double r25439657 = r25439655 * r25439656;
double r25439658 = -1.0;
double r25439659 = r25439658 / r25439646;
double r25439660 = r25439648 * r25439639;
double r25439661 = r25439659 * r25439660;
double r25439662 = fma(r25439652, r25439657, r25439661);
double r25439663 = r25439652 / r25439646;
double r25439664 = r25439663 * r25439660;
double r25439665 = fma(r25439659, r25439660, r25439664);
double r25439666 = r25439662 + r25439665;
double r25439667 = r25439641 ? r25439651 : r25439666;
return r25439667;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
| Original | 10.9 |
|---|---|
| Target | 1.6 |
| Herbie | 9.5 |
if z < -6.190032178478921e-100Initial program 16.5
rmApplied div-sub16.5
rmApplied associate-/l*10.8
if -6.190032178478921e-100 < z Initial program 8.0
rmApplied div-sub8.0
rmApplied div-inv8.0
Applied *-un-lft-identity8.0
Applied prod-diff8.0
rmApplied add-cube-cbrt8.6
Applied add-cube-cbrt8.8
Applied times-frac8.8
Simplified8.8
Final simplification9.5
herbie shell --seed 2019165 +o rules:numerics
(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))))