\frac{x - y \cdot z}{t - a \cdot z}\begin{array}{l}
\mathbf{if}\;\frac{x - y \cdot z}{t - a \cdot z} \le -3.653524365648226522727694876162942276508 \cdot 10^{306} \lor \neg \left(\frac{x - y \cdot z}{t - a \cdot z} \le -7.257659457820581593157072962696615977206 \cdot 10^{-315} \lor \neg \left(\frac{x - y \cdot z}{t - a \cdot z} \le 0.0\right) \land \frac{x - y \cdot z}{t - a \cdot z} \le 5.987964510668616566856227864091206028983 \cdot 10^{295}\right):\\
\;\;\;\;\sqrt[3]{{\left(\frac{x}{t - a \cdot z}\right)}^{3}} - \frac{y}{\frac{t}{z} - a}\\
\mathbf{else}:\\
\;\;\;\;\frac{x - y \cdot z}{t - a \cdot z}\\
\end{array}double f(double x, double y, double z, double t, double a) {
double r495683 = x;
double r495684 = y;
double r495685 = z;
double r495686 = r495684 * r495685;
double r495687 = r495683 - r495686;
double r495688 = t;
double r495689 = a;
double r495690 = r495689 * r495685;
double r495691 = r495688 - r495690;
double r495692 = r495687 / r495691;
return r495692;
}
double f(double x, double y, double z, double t, double a) {
double r495693 = x;
double r495694 = y;
double r495695 = z;
double r495696 = r495694 * r495695;
double r495697 = r495693 - r495696;
double r495698 = t;
double r495699 = a;
double r495700 = r495699 * r495695;
double r495701 = r495698 - r495700;
double r495702 = r495697 / r495701;
double r495703 = -3.6535243656482265e+306;
bool r495704 = r495702 <= r495703;
double r495705 = -7.2576594578206e-315;
bool r495706 = r495702 <= r495705;
double r495707 = 0.0;
bool r495708 = r495702 <= r495707;
double r495709 = !r495708;
double r495710 = 5.987964510668617e+295;
bool r495711 = r495702 <= r495710;
bool r495712 = r495709 && r495711;
bool r495713 = r495706 || r495712;
double r495714 = !r495713;
bool r495715 = r495704 || r495714;
double r495716 = r495693 / r495701;
double r495717 = 3.0;
double r495718 = pow(r495716, r495717);
double r495719 = cbrt(r495718);
double r495720 = r495698 / r495695;
double r495721 = r495720 - r495699;
double r495722 = r495694 / r495721;
double r495723 = r495719 - r495722;
double r495724 = r495715 ? r495723 : r495702;
return r495724;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t




Bits error versus a
Results
| Original | 10.4 |
|---|---|
| Target | 1.8 |
| Herbie | 2.0 |
if (/ (- x (* y z)) (- t (* a z))) < -3.6535243656482265e+306 or -7.2576594578206e-315 < (/ (- x (* y z)) (- t (* a z))) < 0.0 or 5.987964510668617e+295 < (/ (- x (* y z)) (- t (* a z))) Initial program 40.9
rmApplied div-sub40.9
Simplified25.9
rmApplied *-un-lft-identity25.9
Applied associate-*l*25.9
Simplified5.8
rmApplied add-cbrt-cube6.4
Applied add-cbrt-cube18.7
Applied cbrt-undiv18.7
Simplified7.5
if -3.6535243656482265e+306 < (/ (- x (* y z)) (- t (* a z))) < -7.2576594578206e-315 or 0.0 < (/ (- x (* y z)) (- t (* a z))) < 5.987964510668617e+295Initial program 0.2
rmApplied div-sub0.2
Simplified1.7
rmApplied associate-*r/0.2
Applied sub-div0.2
Final simplification2.0
herbie shell --seed 2019326
(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))))