\frac{x}{\left(y - z\right) \cdot \left(t - z\right)}\begin{array}{l}
\mathbf{if}\;\left(y - z\right) \cdot \left(t - z\right) \le 6.34434390289444677 \cdot 10^{108}:\\
\;\;\;\;\frac{1}{\frac{y - z}{\frac{x}{t - z}}}\\
\mathbf{else}:\\
\;\;\;\;\frac{\frac{x}{y - z}}{t - z}\\
\end{array}double f(double x, double y, double z, double t) {
double r804616 = x;
double r804617 = y;
double r804618 = z;
double r804619 = r804617 - r804618;
double r804620 = t;
double r804621 = r804620 - r804618;
double r804622 = r804619 * r804621;
double r804623 = r804616 / r804622;
return r804623;
}
double f(double x, double y, double z, double t) {
double r804624 = y;
double r804625 = z;
double r804626 = r804624 - r804625;
double r804627 = t;
double r804628 = r804627 - r804625;
double r804629 = r804626 * r804628;
double r804630 = 6.344343902894447e+108;
bool r804631 = r804629 <= r804630;
double r804632 = 1.0;
double r804633 = x;
double r804634 = r804633 / r804628;
double r804635 = r804626 / r804634;
double r804636 = r804632 / r804635;
double r804637 = r804633 / r804626;
double r804638 = r804637 / r804628;
double r804639 = r804631 ? r804636 : r804638;
return r804639;
}




Bits error versus x




Bits error versus y




Bits error versus z




Bits error versus t
Results
| Original | 7.5 |
|---|---|
| Target | 8.2 |
| Herbie | 2.2 |
if (* (- y z) (- t z)) < 6.344343902894447e+108Initial program 5.2
rmApplied *-un-lft-identity5.2
Applied times-frac3.5
rmApplied associate-*l/3.4
Simplified3.4
rmApplied *-un-lft-identity3.4
Applied *-un-lft-identity3.4
Applied times-frac3.4
Applied associate-/l*3.8
if 6.344343902894447e+108 < (* (- y z) (- t z)) Initial program 9.8
rmApplied associate-/r*0.5
Final simplification2.2
herbie shell --seed 2020065 +o rules:numerics
(FPCore (x y z t)
:name "Data.Random.Distribution.Triangular:triangularCDF from random-fu-0.2.6.2, B"
:precision binary64
:herbie-target
(if (< (/ x (* (- y z) (- t z))) 0.0) (/ (/ x (- y z)) (- t z)) (* x (/ 1 (* (- y z) (- t z)))))
(/ x (* (- y z) (- t z))))